用到maven-jar-plugin插件與maven-jar-plugin插件,打包完的jar文件所依賴包沒有導包到jar文件中,管理不方便
打包命令:
maven -package
1、目錄結構:
2、Pox.xml配置:
<build> <finalName>bigdata11</finalName><!--打包完成文件的名字--> <plugins> <plugin><!--maven-jar-plugin用於生成META-INF/MANIFEST.MF文件的部分內容 jar包--> <groupId>org.apache.maven.plugins</groupId> <!--引入maven插件的groupId--> <artifactId>maven-jar-plugin</artifactId> <!--引入maven插件的artifactId--> <version>2.4</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath><!--MANIFEST.MF 是否增加依賴包--> <classpathPrefix>lib/</classpathPrefix><!--MANIFEST.MF文件 依賴包位置格式--> <mainClass>proxy.demo.TestMain</mainClass> </manifest> </archive> </configuration> </plugin> <plugin><!--maven-dependency-plugin插件用於將依賴包拷貝到<outputDirectory>${project.build.directory}/lib</outputDirectory>指定的位置,即lib目錄下--> <groupId>org.apache.maven.plugins</groupId><!--將依賴包放到物理存儲外部 li--> <artifactId>maven-dependency-plugin</artifactId> <version>2.4</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build>
此方式只能生成除依賴包之外的(自己寫的代碼)打包成jar文件,會在target目錄下生成jar包,並將依賴包拷貝到target/lib目錄下,目錄結構如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <configuration> <!--依賴裝配 false:指的是,把依賴包跟java程序打包成一個jar文件內;true(默認):指的是,把依賴包單獨打包成一個jar文件--> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!--此處指定main方法入口的class--> <mainClass>wc.WordCountMain</mainClass> </manifest> </archive> </configuration> <executions> <execution> <!--代表執行插件 不寫executions,則打包命令變成:mvn package assembly:single--> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
打包命令:
maven -package
同樣使用assembly插件:maven-jar-plugin maven-assembly-plugin
綜述:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <!-- false:生成的jar中,不要包含pom.xml和pom.properties這兩個文件--> <addMavenDescriptor>true</addMavenDescriptor> <manifest> <!--true:是否要把第三方jar放到manifest的classpath中--> <addClasspath>true</addClasspath> <!--生成的manifest中classpath的前綴,因爲要把第三方jar放到lib目錄下,所以classpath的前綴是lib/--> <classpathPrefix>lib/</classpathPrefix> <!--應用的main class--> <mainClass>wc.WordCountMain</mainClass> </manifest> </archive> <!--過濾掉不希望包含在jar中的文件--> <excludes> <exclude>${project.basedir}/xml/*</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> maven-assembly-plugin </artifactId> <version>2.5.5</version> <configuration> <descriptors> <!-- 描述文件路徑 --> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> <archive> <manifest> <mainClass>wc.WordCountMain</mainClass> </manifest> </archive> </configuration> <executions> <execution> <!--名字任意 --> <id>make-assembly</id> <!-- 綁定到package生命週期階段上 --> <phase>package</phase> <goals> <!-- 只運行一次 --> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
<assembly> <id>release</id><!--名字 會附加在版本後面--> <formats> <format>tar.gz</format><!--打包格式--> </formats> <!--如果爲false,不會額外產生根目錄,否則,在tar.gz包中會產生以pom.xml中artifactId和version命名的根目錄--> <includeBaseDirectory>true</includeBaseDirectory> <!--是對依賴包的設置--> <dependencySets> <!--assembly中dependencySets的意思就是,將scope爲runtime的依賴包,放到AlarmReport/lib目錄下--> <dependencySet> <!--定義了是否解壓依賴包,如果爲true,會解壓出依賴包中的class文件,反之,則不進行解壓--> <unpack>false</unpack> <!--限定了對哪些依賴包進行操作;(依賴包scope的值是在pom.xml中定義的)--> <scope>runtime</scope> <!-- 依賴包在tar.gz包中相對於根目錄的路徑--> <outputDirectory>lib</outputDirectory> <!--依賴包中是否包含當前工程--> <useProjectArtifact>true</useProjectArtifact> </dependencySet> </dependencySets> <!--指定哪些文件包含在打出的tar.gz包中--> <!--assembly中兩個fileSets的作用是, 將target/classes下的文件,打包到AlarmReport目錄;將startup.sh打包到AlarmReport/bin目錄--> <fileSets>
<!-- 把項目相關的說明文件,打包進zip文件的根目錄 --> <fileSet> <directory>${project.basedir}</directory> <outputDirectory>/</outputDirectory> <includes> <include>README*</include> <include>LICENSE*</include> <include>NOTICE*</include> </includes> </fileSet> <!-- 把項目的配置文件,打包進zip文件的config目錄 --> <fileSet> <directory>${project.basedir}\src\main\config</directory> <outputDirectory>config</outputDirectory> <includes> <include>*.xml</include> <include>*.properties</include> </includes> </fileSet> <!-- 把項目的腳本文件目錄( src/main/scripts )中的啓動腳本文件,打包進zip文件的跟目錄 --> <fileSet> <directory>${project.build.scriptSourceDirectory}</directory> <outputDirectory></outputDirectory> <includes> <include>startup.*</include> </includes> </fileSet> <!-- 把項目的腳本文件(除了啓動腳本文件),打包進zip文件的script目錄 --> <fileSet> <directory>${project.build.scriptSourceDirectory}</directory> <outputDirectory></outputDirectory> <includes> <exclude>startup.*</exclude> </includes> </fileSet> <!-- 把項目自己編譯出來的jar文件,打包進zip文件的根目錄 --> <fileSet> <directory>${project.build.directory}</directory> <outputDirectory></outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet></fileSet> </fileSets> </assembly>
打包命令:
maven -package