談談maven打包的幾種方式


直接打包,不打包依賴包

直接打包,不打包依賴包,僅打包出項目中的代碼到JAR包中。在POM中添加如下plugin即可,隨后執行maven install

文章轉載自 https://blog.csdn.net/puhaiyang/article/details/78380550 

 

 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

 

將依賴JAR包輸出到lib目錄方式

 

將項目中的JAR包的依賴包輸出到指定的目錄下,修改outputDirectory配置,如下面的${project.build.directory}/lib。如想將打包好的JAR包可以通過命令直接運行,如java -jar xx.jar,還需要制定manifest配置的classpathPrefix與上面配置的相對應,如上面把依賴JAR包輸出到了lib,則這里的classpathPrefix也應指定為lib/;同時,並指定出程序的入口類,在配置mainClass節點中配好入口類的全類名。
這種打包方式對於JAVA項目是通用的,不管是不是springBoot的項目還是傳統的JAVA項目,都可行。

<plugins>
            <!-- java編譯插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <classpathPrefix>lib/</classpathPrefix>
                            <mainClass>com.yourpakagename.mainClassName</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>

有時為了方便,可以把classpath初在當前目錄上,默認的classpath會在jar包內,可以在Main方法配置后加上manifestEntries配置,指定classpath,如:

 <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-jar-plugin</artifactId>  
                <configuration>  
                    <classesDirectory>target/classes/</classesDirectory>  
                    <archive>  
                        <manifest>  
                            <!-- 主函數的入口 -->  
                            <mainClass>com.yourpakagename.mainClassName</mainClass>  
                            <!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 -->  
                            <useUniqueVersions>false</useUniqueVersions>  
                            <addClasspath>true</addClasspath>  
                            <classpathPrefix>lib/</classpathPrefix>  
                        </manifest>  
                        <manifestEntries>  
                            <Class-Path>.</Class-Path>  
                        </manifestEntries>  
                    </archive>  
                </configuration>  
            </plugin>  

將項目依賴包和項目打為一個包 

這種方式打包會將項目中的依賴包和項目代碼都打為一個JAR包,其配置如下:

<plugin>
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-assembly-plugin</artifactId>  
            <version>2.5.5</version>  
            <configuration>  
                <archive>  
                    <manifest>  
                        <mainClass>com.xxg.Main</mainClass>  
                    </manifest>  
                </archive>  
                <descriptorRefs>  
                    <descriptorRef>jar-with-dependencies</descriptorRef>  
                </descriptorRefs>  
            </configuration>  
        </plugin> 

但此種方式對於傳統的JAVA項目打包沒問題,如是打有spring框架的JAR包就不可以了。可以采用maven-shade-plugin的插件來打包,來實現spring框架的打包
有好幾位朋友說不能在使用此配置時無法將項目的依賴也打到一個JAR包中,通過追溯發現由於是執行的package命令導致發。此處應執行插件的assembly命令。如下圖:

 

springBoot項目打包

springBoot項目打包最常用且最簡單的方式是用springBoot的打包plugin

 <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

在POM中加入此插件,再點擊maven [install]或[repackge]就會把當前項目里所有依賴包和當前項目的源碼都打成一個JAR包,同時還會將沒有依賴包的JAR包也打出來,以.original的就是了。

嗯若是我們要分開打包指定一些內容,可以這樣做 : 

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>root.ReportServerApplication</mainClass>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**</include>
                </includes>
            </resource>
            <resource>
                <directory>${project.basedir}/config</directory>
                <targetPath>${project.basedir}/target/config</targetPath>
            </resource>
            <resource>
                <directory>${project.basedir}/work</directory>
                <targetPath>${project.basedir}/target/work</targetPath>
            </resource>
            <resource>
                <directory>${project.basedir}/app</directory>
                <targetPath>${project.basedir}/target/app</targetPath>
            </resource>
        </resources>
    </build>

groovy項目打包

如果項目中包含groovy代碼,默認采用MAVEN打包時不會將groovy代碼進行打包,需要加入如下配置

<plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>addSources</goal>
                            <goal>addStubSources</goal>
                            <goal>compile</goal>
                            <goal>execute</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

 

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM