maven 笔记

有关maven的使用

安装配置

安装

在apache官网下载maven压缩包,解压完即可使用

配置

需要配置环境变量
MAVEN_HOME 安装路径(C:\ProfessionSofware\Maven\apache-maven-3.3.9)
注意:配置M2_HOME 或者 MAVEN_HOME 都可以,两个功能上是一样的,不过我习惯配制成 MAVEN_HOME
MAVEN_HOME = C:\ProfessionSofware\Maven\apache-maven-3.3.9

在环境变量path里添加 %MAVEN_HOME%\bin
注意:不要在环境变量的最后加;否则以后会遇到问题

验证是否安装配置成功

配置完重新打开命令行 输入

1
2
3
4
5
6
7
mvn -version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: C:\ProfessionSofware\Maven\apache-maven-3.3.9
Java version: 1.8.0_111, vendor: Oracle Corporation
Java home: C:\ProfessionSofware\Java\jdk1.8.0_111\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
1
2
export MAVEN_HOME=/Users/weikeqin/SoftWare/apache-maven-3.6.1
export PATH=$PATH:$MAVEN_HOME/bin:$NODE_PATH/bin:$NODE_PATH/node_global
1
2
3
4
5
6
$ mvn -version
Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-05T03:00:29+08:00)
Maven home: /Users/weikeqin1/SoftWare/apache-maven-3.6.1
Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/jre
Default locale: en_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"

出现以上信息说明配置成功

配置maven仓库

maven作为一个项目管理工具确实非常好用,但是在国内这个网络条件下实在是让人恼火。
maven仓库国内镜像。

maven仓库

修改 ${maven_home}/conf/setting.xml 文件
在maven的 settings.xml 文件里的 mirrors 节点,添加如下子节点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 <!-- add aliyun mirror-->
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>

<!-- 中央仓库2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>

<!-- mvnrepository镜像,常用的maven中央仓库jar查询站点,可直接当maven镜像使用 -->
<mirror>
<id>mvn</id>
<mirrorOf>mvnrepository</mirrorOf>
<url>http://mvnrepository.com/</url>
</mirror>

<mirror>
<id>ui</id>
<name>Mirror from UK</name>
<url>http://uk.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>

<mirror>
<id>jboss-public-repository-group</id>
<mirrorOf>central</mirrorOf>
<name>JBoss Public Repository Group</name>
<url>http://repository.jboss.org/nexus/content/groups/public</url>
</mirror>

<!-- spring的libs-release镜像,存放spring项目及其子项目的jar包,以及相关的依赖jar -->
<mirror>
<id>libs-release</id>
<mirrorOf>repo1</mirrorOf>
<url>https://repo.spring.io/libs-release</url>
</mirror>

<!-- spring的milestone镜像,存放着spring项目及其子项目的里程碑版本jar包 -->
<mirror>
<id>milestone</id>
<mirrorOf>repo2</mirrorOf>
<url>https://repo.spring.io/milestone</url>
</mirror>

<!-- spring的snapshot镜像,存放着spring项目及其子项目的预览版本jar包 -->
<mirror>
<id>snapshot</id>
<mirrorOf>repo3</mirrorOf>
<url>https://repo.spring.io/snapshot</url>
</mirror>

或者在pom.xml文件里添加repositories节点,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<layout>default</layout>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>

maven常用命令

  1. 创建Maven的普通java项目:
    mvn archetype:create
    -DgroupId=packageName
    -DartifactId=projectName
  2. 创建Maven的Web项目:
    mvn archetype:create
    -DgroupId=packageName
    -DartifactId=webappName
    -DarchetypeArtifactId=maven-archetype-webapp
  3. 编译源代码: mvn compile
  4. 编译测试代码:mvn test-compile
  5. 运行测试:mvn test
  6. 产生site:mvn site
  7. 打包:mvn package
  8. 在本地Repository中安装jar:mvn install
  9. 清除产生的项目:mvn clean
  10. 生成eclipse项目:mvn eclipse:eclipse
  11. 生成idea项目:mvn idea:idea
  12. 组合使用goal命令,如只打包不测试:mvn -Dtest package
  13. 编译测试的内容:mvn test-compile
  14. 只打jar包: mvn jar:jar
  15. 只测试而不编译,也不测试编译:mvn test -skipping compile -skipping test-compile
    ( -skipping 的灵活运用,当然也可以用于其他组合命令)
  16. 清除eclipse的一些系统设置:mvn eclipse:clean

ps:

一般使用情况是这样,首先通过cvs或svn下载代码到本机,然后执行mvn eclipse:eclipse生成ecllipse项目文件,然后导入到eclipse就行了;修改代码后执行mvn compile或mvn test检验,也可以下载eclipse的maven插件。

mvn -version/-v 显示版本信息
mvn archetype:generate 创建mvn项目
mvn archetype:create -DgroupId=com.oreilly -DartifactId=my-app 创建mvn项目

mvn package 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件
mvn jetty:run 运行项目于jetty上,
mvn compile 编译
mvn test 编译并测试
mvn clean 清空生成的文件
mvn site 生成项目相关信息的网站
mvn -Dwtpversion=1.0 eclipse:eclipse 生成Wtp插件的Web项目
mvn -Dwtpversion=1.0 eclipse:clean 清除Eclipse项目的配置信息(Web项目)
mvn eclipse:eclipse 将项目转化为Eclipse项目

在应用程序用使用多个存储库



Ibiblio
Ibiblio
http://www.ibiblio.org/maven/


PlanetMirror
Planet Mirror
http://public.planetmirror.com/pub/maven/

mvn deploy:deploy-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar -DrepositoryId=maven-repository-inner -Durl=ftp://xxxxxxx/opt/maven/repository/

发布第三方Jar到本地库中:

mvn install:install-file -DgroupId=com -DartifactId=client -Dversion=0.1.0 -Dpackaging=jar -Dfile=d:\client-0.1.0.jar

-DdownloadSources=true

-DdownloadJavadocs=true

mvn -e 显示详细错误 信息.
mvn validate 验证工程是否正确,所有需要的资源是否可用。
mvn test-compile 编译项目测试代码。 。
mvn integration-test 在集成测试可以运行的环境中处理和发布包。
mvn verify 运行任何检查,验证包是否有效且达到质量标准。
mvn generate-sources 产生应用需要的任何额外的源代码,如xdoclet。

常用命令:
mvn -v 显示版本
mvn help:describe -Dplugin=help 使用 help 插件的 describe 目标来输出 Maven Help 插件的信息。
mvn help:describe -Dplugin=help -Dfull 使用Help 插件输出完整的带有参数的目标列
mvn help:describe -Dplugin=compiler -Dmojo=compile -Dfull 获取单个目标的信息,设置 mojo 参数和 plugin 参数。此命令列出了Compiler 插件的compile 目标的所有信息
mvn help:describe -Dplugin=exec -Dfull 列出所有 Maven Exec 插件可用的目标
mvn help:effective-pom 看这个“有效的 (effective)”POM,它暴露了 Maven的默认设置

mvn archetype:create -DgroupId=org.sonatype.mavenbook.ch03 -DartifactId=simple -DpackageName=org.sonatype.mavenbook 创建Maven的普通java项目,在命令行使用Maven Archetype 插件
mvn exec:java -Dexec.mainClass=org.sonatype.mavenbook.weather.Main Exec 插件让我们能够在不往 classpath 载入适当的依赖的情况下,运行这个程序
mvn dependency:resolve 打印出已解决依赖的列表
mvn dependency:tree 打印整个依赖树

mvn install -X 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行
mvn install -Dmaven.test.skip=true 给任何目标添加maven.test.skip 属性就能跳过测试
mvn install assembly:assembly 构建装配Maven Assembly 插件是一个用来创建你应用程序特有分发包的插件

mvn jetty:run 调用 Jetty 插件的 Run 目标在 Jetty Servlet 容器中启动 web 应用
mvn compile 编译你的项目
mvn clean install 删除再编译

mvn hibernate3:hbm2ddl 使用 Hibernate3 插件构造数据库

创建maven项目

pom文件解释

常见错误

1. maven项目 错误: 找不到或无法加载主类

报错信息为:Missing artifact com.company.air:air-client:jar:1.0.1
到当前用户的.m2目录下查看,jar文件已经正常下载了。
解决方法:
1 到报错的.m2的对应目录下,检查发现目录下是否存在以如下结尾的文件:
-not-available
.lastUpdated
将这两个文件删掉,重新build,如果问题解决,应该是之前未下载成功产生了这两个文件,影响了maven正常更新
2 删掉之后重新下载,下载完可能出现一种情况,本地maven仓库有了,Eclipse还提示没有,这是IDE的问题,
这个时候 选中项目 右键 maven update 记得选中force update,更新一下就好了
3 如果上述办法无效,到eclipse-help-install new software-available software sites下,
找之前安装m2eclipse插件的地址,如果是,将其卸载,
按如下地址重新安装m2eclipse插件:http://m2eclipse.sonatype.org/sites/m2e
4 如果上述方法仍无效,可尝试在eclipse中先用Close Project关掉出问题的工程,
然后再Open Project打开;或用Project-Clean重新build该工程

2. git + maven

http://www.blogjava.net/youxia/archive/2013/12/29/408182.html

3. maven可选依赖(Optional Dependencies)和依赖排除(Dependency Exclusions)

http://www.tuicool.com/articles/yaeIV3

1
2
3
4
5
6
<exclusions>
<exclusion> <!-- declare the exclusion here -->
<groupId>sample.ProjectC</groupId>
<artifactId>Project-C</artifactId>
</exclusion>
</exclusions>

4. Missing artifact jdk.tools:jdk.tools:jar:1.7

1
2
3
4
5
6
7
<dependency>  
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>1.7</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

5. -source 1.5 中不支持 diamond 运算符

原因:在pom.xml里没有指定JDK版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.7</java.version>
</properties>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

6. The type org.nlpcn.commons.lang.tire.domain.Forest cannot be resolved. It is indirectly referenced from required .class files

1 JDK 版本
2 Jdk.tools
3 少nlp-lang的包

1
2
3
4
5
6
7
8
9
10
11
12
13
<dependency>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
<version>${java.version}</version>
<scope>system</scope>
<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
</dependency>

<dependency>
<groupId>org.nlpcn</groupId>
<artifactId>nlp-lang</artifactId>
<version>1.7</version>
</dependency>

6. There are test failures.

BUILD FAILURE
There are test failures.

1
mvn clean install -Dmaven.test.skip=true

References

[1] maven常用命令
[2] 在Eclipse中创建Maven多模块工程的例子
[3] pom文件提示:Missing artifact
[4] maven项目 错误: 找不到或无法加载主类
[5] 快使用阿里云的maven仓库
[6] maven 编译时跳过单元测试