1. 程式人生 > >Maven 複製jar到指定目錄

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