Maven 複製jar到指定目錄
在完成模組開發後,需要釋出jar到nexus上,與此同時,則要部署開發的模組,需要將編譯打包的jar複製到指定的路徑,再進行部署,而不是手動的去複製那些jar,因為當模組多的話,則會感到特別的煩,所以,利用maven整合的ant來進行這些操作。pom.xml檔案配置如下:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <target.dir>F:\生產釋出包\釋出包</target.dir> <target.version>2.1.4-1.0-RELEASE</target.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.3</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-source-plugin</artifactId> <version>2.1</version> <configuration> <attach>true</attach> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-antrun-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <mkdir dir="${target.dir}/${target.version}"/> <copy todir="${target.dir}/${target.version}" overwrite="true" > <fileset dir="${project.build.directory}" erroronmissingdir="false"> <include name="*.jar"/> </fileset> </copy> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> <distributionManagement> <snapshotRepository> <id>snapshots</id> <name>meis</name> <url>http://191.168.2.1:8081/repository/maven-snapshots/</url> <uniqueVersion>true</uniqueVersion> </snapshotRepository> <repository> <id>releases</id> <name>meis</name> <url>http://191.168.2.1:8081/repository/maven-releases/</url> </repository> </distributionManagement>
其中,plugin的artifactId為maven-antrun-plugin的就是Ant外掛,tasks的內容可參考Ant的幫助文件,查閱 Ant Tasks;plugin的artifactId為maven-source-plugin的則表示在打包的時候同時打包原始碼,編譯後的jar和原始碼jar都會被上傳至nexus上面;關於nexus的登入名和密碼,需要在maven的setting.xml中配置:
<server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> <server> <id>snapshots</id> <username>admin</username> <password>admin123</password> </server>
需要注意id保持一致;
關於上面copy任務的解說:
1.mkdir為建立對應的資料夾,如已存在則忽略;
2.copy的todir為複製檔案的目的地,overwrite為強制覆蓋,預設為false;
3.fileset為檔案集,dir為目錄,${project.build.directory}指的是當前構建路勁,指的是 專案/target 目錄,erroronmissingdir為false指的是當目錄不存在時忽略掉,預設為丟擲異常;
4.include表示檔案包含*.jar的檔案,指複製*.jar檔案,編譯的jar和原始碼jar;
複製任務需設定phase為package,否則jar沒有打包就會執行復制任務。
右鍵執行(Run As)--》Maven build...--》在Goals中輸入命令clean deploy,點選Run,則會進行打包,此時可檢視控制檯資訊。
如需重複部署(deploy),則需設定nexus上面release Repository的policy為Allow redeploy