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

Commit id: f97a51ce44dfd5d2b34382f411e45c140ec2257c

deletions | additions      

       

# Reproducibility in software: software development:  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 apparent  [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.   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}. The metadata can contain information about authors, contact details and source code repositories, which will be bundled with the produced binaries for provenance purposes, but can also be used by the [Maven Site plugin](https://maven.apache.org/plugins/maven-site-plugin/) to generate a website for the project.  Building 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`), _version_ (`1.4.0-SNAPSHOT`) and type (`jar`). Dependencies are specified using the same attributes, and the corresponding precompiled binaries are automatically retrieved from _Maven repositories_, including transitive dependencies found in the dependency's deployed `pom` file.  Maven repositories are HTTP-based directory structures, and include the [Maven Central](http://central.sonatype.org/) and [Bintray JCenter](https://bintray.com/bintray/jcenter) which hosts a majority of open source JVM libraries, but can be hosted by any standard file-based HTTP server like [Apache HTTPd](https://httpd.apache.org/) and [nginx](http://nginx.org/). Organizations relying on Maven may be hosting in-house artifacts in private repository installations of [JFrog Artifactory](http://www.jfrog.com/artifactory/) and [Sonatype Nexus](http://www.sonatype.com/nexus/), which adds enterprise features such as rich access control, release mechanisms and transparent mirroring of artifacts from external Maven repositories.  Build systems like Maven lower the barrier of entry for developing and deploying software, as it