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

Commit id: fcfdabab42113fcf7e87c7ba9b1b3d438c76352c

deletions | additions      

       

[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}.  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.