maven打包成jar文件与打包成tar.gz文件
一、普通main方法入口的jar程序打包 maven-jar-plugin插件与maven-jar-plugin插件
用到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目录下,目录结构如下:
二、使用maven-assembly-plugin插件打包(与eclipse导出类似)
<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
三、maven 打包成tar.gz文件
同样使用assembly插件:maven-jar-plugin maven-assembly-plugin
综述:
1、首先pom.xml文件添加插件
<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>
2、描述文件(src\main\assemble\assembly.xml)
<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