diff --git a/tech/development.wiki b/tech/development.wiki index b4ae4f1..9e5c1e5 100644 --- a/tech/development.wiki +++ b/tech/development.wiki @@ -22,6 +22,7 @@ * [[git]] - Version controll * [[qemu]] - Virtual machine * [[Docker]] - Psudeo VMs +* [[maven]] - Apache dependency tool == Human aspect == diff --git a/tech/make.wiki b/tech/make.wiki new file mode 100644 index 0000000..e646b1c --- /dev/null +++ b/tech/make.wiki @@ -0,0 +1,3 @@ += Make = + +Make is the unix standard build tool, utilizing a Makefile diff --git a/tech/maven.wiki b/tech/maven.wiki new file mode 100644 index 0000000..318c185 --- /dev/null +++ b/tech/maven.wiki @@ -0,0 +1,258 @@ += Maven = + +Maven uses a Project object model to manage a software project. It manages + +* reporting +* documentation +* building + +Maven can + +* build multiple projects together +* can manage: + * builds + * documentation + * reporting + * dependencies + * SCMs + * Releases + * distribution + * mailing lists + +*All maven project structure is in an xml file called pom.xml* + +For a quickstart, go to [[#Creating a project]] + +Maven uses sensible defaults, requiring minimal configuration on the part of +the developer. Some defaults are below + +| Item | Default | +| source | /src/main/java | +| resources | /src/main/resources | +| tests | /src/test | +| compiled byte code (.o) | /target | +| jar | /target/classes | + + +== pom.xml == + +This is the configuration file for maven, it lives in the base directory of the +project as pom.xml. There is a single POM file for each project + +A POM requires a + +* groupId +* artifactId +* version + +With this notation, all projects are notated as +`groupId:artifactId:version` + +Example POM + +{{{ + + 4.0.0 + + com.companyname.project-group + project + 1.0 + + }}} + +=== Super POM === + +All POM files inheret from the Super POM, this file is the default +configuration of all projects. + +To view the current configuration, run `mvn help:effective-pom` + +== Creating a project == + +Maven uses archetype plugins to create projects. These are essentially +templates. + +To create a simple java application, run the following command + +{{{ +mvn archetype:generate \ + -DgroudId = com.company.subcompany \ + -DartifactId = ProjectName \ + -DarchetypeArtifactId = maven-archetype-quickstart \ + -DinteractiveMode = false + }}} + +This command specifies, + +* the group +* the project +* the type of template to use (quickstarrt) +* to not be interactive + +== Build lifecycle == + +The general lifecycle, or sequence of phases that maven takes are as follows + +| phase | handles | +| prepare-resources | resource copying | +| validate | validate if all resources present | +| compile | compilation | +| test | testing with a framework | +| package | packaging (into jar) | +| install | installing in local repo | +| deploy | copy final package to remote repo | + +== Plugins == + +All functionality in maven is in frameworks, making it modular. Maven built in +plugins due most basic operations including + +* creating jar files +* create war file +* compile code files +* unit testing +* create documenation +* create reports + +Some built in plugins include, + +| name | job | +| clean | clean up target | +| compiler | compile java source | +| surefire | run JUnit tests | +| jar | build JAR file | +| war | build WAR file | +| javadoc | create javadoc | +| antrun | run ant tasks from any phase | + +=== Site === + +Site is a plugin to create documentation to create reports, deploy site, etc + +== Build profiles == + +Build profiles can be specified with the `-P` flag when `mvn` is called. +Profiles can be configured with the `` tag. A more thurough example +is below + +{{{ + + + test + + + + org.apache.maven.plugins + maven-antrun-plugin + 1.1 + + + test + + run + + + + Using env.test.properties + + + + + + + + + + + }}} + +Note that at the `` tag, you can specify what happens when that profile +is selected. In this instance, it copies a properties files to the correct +directory. The name of the profile that is passed on the command line is +configured with the `` tag. + +Activation elements can be added to build profiles with the `` tag. +This tag can take arguments or paramaters to check against in the enviroment it +is running, to automatically determine what profile to activate. Below are some +examples + +Via enviroment var + +{{{ + + test + + + env + test + + + + }}} + +Via OS (the example tirrgers on Windows XP) + +{{{ + + test + + + Windows XP + Windows + x86 + 5.1.2600 + + + + }}} + +Via present/missing files (the example checks the path in the `` tag) + +{{{ + + test + + + target/generated-sources/axistools/wsdl2java/ + com/companyname/group + + + + }}} + +== Repositories == + +A repository in maven terminology is a directory where project jars, library +jars, plugins, etc are stored and used by maven. There are three types + +* local +* central +* remote + +=== Local === + +A local maven repo is created first time you run maven on your machine. When +`mvn build` is run for the first time, it downloads all dependency jars + +=== Central === + +The central repo is one provided by the maven community, it contains common +libraries. When a dependency is not found in the local repo, it automatically +searches the central repo. + +In general key concepts, + +* managed by maven community +* not required to be configured +* must have internet + +=== Remote === + +A remote repo is only searched when specified via the `` tag in +the pom.xml file. It specifies a url for maven to search on. These repos are +usually internal repos maintained by companies internally. +