发表于: 2017-09-12 22:59:34
1 850
任务进展:
今天准备小课堂并演示,主要讲了maven常用的打包插件使用以及打jar、war、可执行jar、zip与tar包的方法。常规的打jar包其包含的只有class文件和资源文件,打war包可以自定义资源配置,打出来需放在web容器中才能运行,常用的web容器有jetty、tomcat和resin。
重点是生成可执行jar包,这个在任务8和9中需要用到,打出可执行jar包在服务器上运行。有三种方式:
1)使用maven jar和dependency插件,基本配置为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<!-- 告知 maven-jar-plugin添加一个 Class-Path元素到 MANIFEST.MF文件,以及在Class-Path元素中包括所有依赖项 -->
<addClasspath>true</addClasspath>
<!-- 所有的依赖项应该位于 lib文件夹 -->
<classpathPrefix>lib/</classpathPrefix>
<!-- 当用户使用 lib命令执行JAR文件时,使用该元素定义将要执行的类名 -->
<mainClass>com.jnshu.MybatisDemo</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.0.1</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>
二者结合,执行mvn package可生成可执行的jar包。
2)使用maven-shade-plugin,基本配置为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.jnshu.MybatisDemo</mainClass>
</transformer>
<!--<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">-->
<!--<resource>META-INF/spring.handlers</resource>-->
<!--</transformer>-->
<!--<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">-->
<!--<resource>META-INF/spring.schemas</resource>-->
<!--</transformer>-->
</transformers>
</configuration>
</execution>
</executions>
</plugin>
上面注释掉的部分为spring框架的配置,如果你的项目使用了spring框架,则必须加上此配置,否则会运行报错,找不着spring约束。
3)使用maven-assembly-plugin,基本配置为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.jnshu.MybatisDemo</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
以上配置打包时必须执行mvn package assembly:single命令,否则不能执行。可以将assembly:single配置到插件中:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.jnshu.MybatisDemo</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
如此便可直接运行mvn package打出可执行jar包。
实际的软件项目常常会有更复杂的打包需求,例如我们可能需要为客户提供一份产品的分发包,这个包不仅仅包含项目的字节码文件,还得包含依赖以及相关脚本文件以方便客户解压后就能运行,此外分发包还得包含一些必要的文档。
assembly插件支持各种打包文件格式,包括zip、tar.gz、tar.bz2等等,通过一个打包描述文件,能够帮助用户选择具体打包哪些文件集合、依赖、模块、和甚至本地仓库文件,每个项的具体打包路径用户也能自由控制。
基本示例:
<assembly>
<id>bin</id>
<formats>
<format>zip</format>
</formats>
<dependencySets>
<dependencySet>
<useProjectArtifact>true</useProjectArtifact>
<outputDirectory>lib</outputDirectory>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<outputDirectory>/</outputDirectory>
<includes>
<include>README.MD</include>
</includes>
</fileSet>
<fileSet>
<directory>target/classes</directory>
<outputDirectory>classes</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>resources</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/scripts</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>jquery-3.2.0.js</include>
</includes>
</fileSet>
</fileSets>
</assembly>
assembly.xml文件的id对应了其最终生成文件的classifier。
formats定义打包生成的文件格式。
dependencySets用来定义选择依赖并定义最终打包到什么目录。
fileSets允许用户通过文件或目录的粒度来控制打包。
最后一点,assembly插件对包含spring框架的项目打可运行jar包会报错,我没有试过更多的写法,网上有讲到这个问题:说是assembly插件的bug,所以推荐使用shade插件打包spring框架的项目。链接:http://chenzhou123520.iteye.com/blog/1706242
遇到问题:
无
明日计划:
codereview,写学习总结
收获:
maven常用打包插件使用
进度:
任务开始时间:2017.09.8
预计demo时间:2017.09.15
是否有延期风险:无
评论