Stian Soiland-Reyes added Reproducibility_in_software_Maven_and__.md  almost 9 years ago

Commit id: c7af3cef51f43c83f002996d103c592dd37ce8c7

deletions | additions      

         

# Reproducibility in software: Maven and Jenkins  [Apache Maven](http://maven.apache.org/) \cite{Varanasi_2014} is a build and dependency management system that is widely popular for the Java platform. While newer build systems like [Apache Ivy](https://ant.apache.org/ivy/) and [Gradle](http://gradle.org/) have evolved to counter Maven's apparant [verbosity and lack of flexibility](http://stackoverflow.com/questions/1077477/why-do-so-few-people-use-maven-are-there-alternative-tools), they still derive their dependency resolution and metadata aspects from Maven.  A software project that is built using Maven defines its compile settings and metadata in a `pom.xml` file. Executing the Maven project produces one or more _Maven _artifacts_ (e.g. a JAR file), identified with a _group identifier_ (e.g. `com.example.project1`), an _artifact identifier_ (`project1-api`) and _version_ (`1.4.0-SNAPSHOT`). Precompiled dependencies are specified using the same attributes, and are automatically retrieved from _Maven repositories_, including the [Maven Central](http://central.sonatype.org/) and [Bintray JCenter](https://bintray.com/bintray/jcenter) which hosts a majority of open source JVM libraries. Companies often private installations of   Maven has an extensive list of official and third-party [plugins](https://maven.apache.org/plugins/) to cater for customized build requirement, but also strongly encourage a fixed directory structure (e.g. main source code in `src/main/java` and test resources in `src/test/resources`) and [convention over configuration](https://en.wikipedia.org/wiki/Convention_over_configuration) \cite{Lazar_2009}.