diff --git a/content/posts/go-library-maven-pom-parser.md b/content/posts/go-library-maven-pom-parser.md new file mode 100644 index 0000000..06a17ff --- /dev/null +++ b/content/posts/go-library-maven-pom-parser.md @@ -0,0 +1,95 @@ ++++ +title = "Go library to parse Maven POM file" +date = "2019-10-16" +author = "Aloïs Micard" +authorTwitter = "" #do not include @ +cover = "" +tags = ["Golang"] +keywords = ["", ""] +description = "" +showFullContent = false ++++ + +I have recently written a little go tool that parse maven pom file to analyse dependencies between two projects in order to perform detailed analysis such as evolution of project dependencies, etc... + +After a bit of research I couldn't find any existing parser for Go and therefore I have decided to write one. As XML parsing is supported natively in Go there is not much work to do: only declare the structure that the Go XML parser will use. + +Since my parser was working great I have decided to open source it: [github.com/creekorful/mvnparser](https://github.com/creekorful/mvnparser) + +Let's take the following POM as example: + +```xml + + 4.0.0 + + com.example + my-app + 1.0.0-SNAPSHOT + + + + junit + junit + test + + + javax.enterprise + cdi-api + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + + + + + +``` + +You can parse it using the following code: + +```go +package main + +import ( + "github.com/creekorful/mvnparser" + "encoding/xml" + "log" +) + +func main() { + // filled with previously declared xml + pomStr := "..." + + // Load project from string + var project mvnparser.MavenProject + if err := xml.Unmarshal([]byte(pomStr), &project); err != nil { + log.Fatalf("unable to unmarshal pom file. Reason: %s", err) + } + + log.Print(project.GroupId) // -> com.example + log.Print(project.ArtifactId) // -> my-app + log.Print(project.Version) // -> 1.0.0-SNAPSHOT + + // iterate over dependencies + for _, dep := range project.Dependencies { + log.Print(dep.GroupId) + log.Print(dep.ArtifactId) + log.Print(dep.Version) + + // ... + } +} +``` + +Happy hacking ! \ No newline at end of file