美文网首页
Java项目构建-Maven

Java项目构建-Maven

作者: ningping | 来源:发表于2017-12-28 13:55 被阅读0次

    例子:HelloWorld

    创建

    用mvn插件archetype创建helloworld项目:

    egao$ mvn archetype:generate -DgroupId=com.ellie.helloworld -DartifactId=helloworld -Dpackage=com.ellie.helloworld -Dversion=1.0-SNAPSHOT

    项目的默认目录结构如下(除非特别定制,maven项目都遵循这种惯例):

    egao$ cd helloworld

    egao$ ll

    total 0

    -rw-r--r--  1 egao  staff  762 Dec 28 10:24 pom.xml

    drwxr-xr-x  4 egao  staff  136 Dec 28 10:24 src

    编译打包

    "mvn package",将执行mvn默认生命周期中从开始到package 阶段(包括default-resources,default-compile,default-testResources,default-testCompile,default-test,default-jar)的所有任务。

    egao$ mvn package

    [INFO] Scanning for projects...

    ...

    [INFO] Building helloworld 1.0-SNAPSHOT

    ...

    [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ helloworld ---

    ...

    [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ helloworld ---

    ...

    [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ helloworld ---

    ...

    [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ helloworld ---

    ...

    [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ helloworld ---

    ...

    [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ helloworld ---

    ...

    [INFO] BUILD SUCCESS

    ...

    构建后会生成target目录,class文件和jar文件位于该目录:

    egao$ ll

    total 8

    -rw-r--r-- 1 egao staff 762 Dec 28 10:24 pom.xml

    drwxr-xr-x 4 egao staff 136 Dec 28 10:24 src

    drwxr-xr-x 8 egao staff 272 Dec 28 14:08 target

    egao$ java -cp target/helloworld-1.0-SNAPSHOT.jar com.ellie.helloworld.App

    Hello World!

    Maven概念解析

    POM

    项目坐标:groupId+artifactId+version+packaging

    子项目会继承父项目的pom。所有pom都继承自一个super pom。

    通过mvn help:effective-pom可以查看构建时真正使用的pom。

    插件和生命周期

    maven控制构建过程(生命周期),构建过程的每个具体步骤是交给插件执行的。

    以HelloWorld为例,它使用默认的生命周期。

    process-resources 阶段:resources:resources

    compile 阶段:compiler:compile

    process-classes 阶段:(默认无目标)

    process-test-resources 阶段:resources:testResources

    test-compile 阶段:compiler:testCompile

    test 阶段:surefire:test

    prepare-package 阶段:(默认无目标)

    package 阶段:jar:jar

    在HelloWorld的构建过程中,maven-compiler-plugin这个插件使用了两次:编译业务代码(compile阶段,compiler:compile),编译测试代码(test-compile阶段,compiler:testCompile)。

    依赖管理

    依赖传递:项目依赖A.jar, A.jar又依赖B.jar,项目只需定义对A的依赖。maven会根据A的pom文件自动下载B

    依赖的scope:决定了依赖关系的适用范围。默认是compile,任何时候都会被包含在 classpath 中,包括打包。test scope只有在test阶段才会起作用。provided scope在打包时不起作用,它表示运行环境会提供这个依赖的jar

    public的maven项目可以从默认的maven库下载:http://repo.maven.org/maven2

    maven下载的jar在本地默认存放在~/.m2/repository中。

    maven 查找需要的 jar 文件时,会先在本地找,然后去远程库找。

    复杂的例子:多模块web项目

    References

    Apache Maven

    Apache Maven 入门篇 ( 上 )

    Apache Maven 入门篇(下)

    Maven Archetype的设计和使用

    Apache Ant 教程

    相关文章

      网友评论

          本文标题:Java项目构建-Maven

          本文链接:https://www.haomeiwen.com/subject/jjzmgxtx.html