一、初学maven,使用命令打包方便快捷,对于有依赖关系的maven项目,先打被依赖的项目,再打原项目:
1、dos命令cmd
2、进入项目的pom.xml根目录
3、运行:
mvn clean 清除以前产生的项目
mvn install 打包maven项目
4、手动添加jar至私服,登陆nexus:
二、maven打包遇到的一些问题:
1、Fatal error compiling: 无效的目 标版本: 1.7 -> [Help 1]
因为是在cmd中执行,然后maven依赖jdk,我的环境变量中将JAVA_HOME写死,指导了jdk1.6版本。而这个项目需要1.7版本,
本地环境JDK1.6版本:
解决办法:在POM.xml文件的编译插件中属性
1 <plugin> 2 <artifactId>maven-compiler-plugin</artifactId> 3 <version>3.1</version> 4 <configuration> 5 <source>1.7</source> 6 <target>1.7</target> 7 </configuration> 8 </plugin>
2、执行maven clean如下警告:
[WARNING] 'parent.relativePath' points at com.cncrowd.tech.inf:inf-base instead of com.common.item.root:common-root, please verify your project structure @ line 3, column 13
意思是找不到common-root这个模块……因为maven不知道common-root模块存在的位置才会导致警告信息的出现,解决办法是手动指定common-root模块的位置,所以最终的解决办法是在parent标签中加入:
<relativePath>../parent/pom.xml</relativePath>
解决办法:
<parent> <groupId>com.common.base</groupId> <artifactId>common-base</artifactId> <version>1.0.0-SNAPSHOT</version> <relativePath>../parent/pom.xml</relativePath> </parent>
3、执行maven clean如下警告:
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-source-plugin is missing. @ com.common.item.pom:common-pom:0.0.1, D:\Maven\repository\com\common\item\pom\common-pom\0.0.1\common-pom-0.0.1.pom, line 72, column 12
警告原因是maven3以上需要知道maven-source-plugin的版本号
source插件打包同时生成源码
解决办法:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>jar-no-fork</goal> </goals> </execution> </executions> </plugin>
执行 mvn install,maven会自动将source install到repository 。
执行 mvn deploy,maven会自动将source deploy到remote-repository 。
执行 mvn source:jar,单独打包源码。
4、执行maven clean如下警告:
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-site-plugin is missing. @ com.common.item.pom:common-pom:0.0.1, D:\Maven\repository\com\common\item\pom\common-pom\0.0.1\common-pom-0.0.1.pom, line 111, column 12
maven-site-plugin是一个负责为Java项目生成静态HTML网站的插件。这个插件非常的有用,里面可以嵌入各种插件,比如用来对代码检查bug的findbugs,检查代码风格的checkstyle,生成testng测试报告的surefire
5、执行maven clean如下警告:
[WARNING] 'build.plugins.plugin.version' for org.codehaus.mojo:cobertura-maven-plugin is missing. @ com.common.item.pom:common-pom:0.0.1, D:\Maven\repository\com\common\item\pom\common-pom\0.0.1\common-pom-0.0.1.pom, line 93, column 12
cobertura-maven-plugin提供单元测试整体覆盖率以及分支覆盖率的统计工具
解决办法如下:
<plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.5.1</version> </plugin> </plugins>
6、执行maven install如下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project cncrowd-service: Compilation failure
[ERROR] E:\cncrowd_workspace\cncrowd-service\src\main\java\com\cncrowd\mobile\service\impl\FundServiceImpl.java:[189,39] 无法确定 <T>T 的类型参数;对于上限为 int,java.lang.Object 的类型变量 T,不存在唯一最大实例
问题原因:
用Maven编译,jdk版本已经指定为1.6版,在本地mavan编译打包也一切正常。在maven打包服务器上打包就会出以上的异常信息。发现打包服务器上的jdk版本是jdk1.6.0_16版本,经过查找相关资料确认,该问题是jdk1.6.0_16版本一个bug导致的,这是一个确认的错误:错误号:6468354,具体错误原因可以查看:https://bugs.openjdk.java.net/browse/JDK-6468354
解决办法:
1. 在返回的地方加强制类型转换,可以临时绕过该问题
2. 升级jdk版本至新版本
7、执行maven install如下警告:
[WARNING] \cncrowd_workspace\common-deploy\common-util\src\test\java\com\woyo\pay\app\common\security\RSAHelper.java:[9,15] 警告:sun.misc.BASE64Decoder 是 Sun的专用 API,可能会在未来版本中删除
只需要将pom.xml 中maven插件的版本修改一下即可~ 用2.3.2以上的版本哦.
解决办法如下:
1 <plugin> 2 <groupId>org.apache.maven.plugins</groupId> 3 <artifactId>maven-compiler-plugin</artifactId> 4 <version>2.3.2</version> 5 <configuration> 6 <source>1.6</source> 7 <target>1.6</target> 8 </configuration> 9 </plugin>