一、初學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>