主要讲3点,生成runnable jar 方法1是生成一个目录 方法2是直接一个runnable的jar 方法3是关于包含spring工程的情况 方法2和3其实是一致的
1、生成runnable jar,但是最后并不是一个可执行的jar 而是一个目录
主要使用 三个插件 将所需要的资源拷贝到 /target/Crunchify目录下,注意并没有生成一个jar中去
maven-resources-plugin
, maven-dependency-plugin
& maven-jar-plugin
to generate your complete executable Jar Project? As a result it creates / copies all required files to /target/Crunchify
folder.
几点说明:
CrunchifyMavenBuildPlugins
is a Maven Project. If you have Java project and wanted to convert it into Maven project then follow this tutorial.- We do have two folders.
src
andresources.
- Inside
resources
folder we do have a folder calledScripts
which contains one executableshell script file. CrunchifyMain.java
is a main starting point which hasmain(String args[])
method inside.pom.xml
file in which we will add Maven Plugins which will build executable .jar project with all included dependancies
pom文件如下:注意build标签下的3个plugins<build>
1 <pluginManagement> 2 <plugins> 3 <plugin> 4 <groupId>org.apache.maven.plugins</groupId> 5 <artifactId>maven-compiler-plugin</artifactId> 6 <version>2.3.1</version> 7 <configuration> 8 <source>1.7</source> 9 <target>1.7</target> 10 </configuration> 11 </plugin> 12 </plugins> 13 </pluginManagement> 14 <plugins>
<!--说明:The Resources Plugin 会将project resources拷贝到输出目录.project resources are the resources associated to the main source code-->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions> <execution> <id>copy-resources</id> <phase>validate</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <outputDirectory>${basedir}/target/Crunchify</outputDirectory> <resources> <resource> <directory>resources</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <!--说明:The dependency plugin provides the capability to manipulate artifacts. It can copy and/or unpack artifacts from local or remote repositories to a specified location--> <executions> <execution> <id>copy-dependencies</id> <phase>prepare-package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/Crunchify/lib</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <!-- This plugin provides the capability to build and sign jars.--> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.crunchify.tutorial.CrunchifyMain</mainClass> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> <finalName>Crunchify/Crunchify</finalName> </configuration> </plugin> </plugins> </build>
最后看看结果
2、生成到一个jar包中,这个时候需要在插件maven-shade-plugin上做文章,主要用到的技术是 Resource Transformers
主要看下pom文件
81 <build> 82 <pluginManagement> 83 <plugins> 84 <plugin> 85 <groupId>org.apache.maven.plugins</groupId> 86 <artifactId>maven-compiler-plugin</artifactId> 87 <version>2.3.1</version> 88 <configuration> 89 <source>1.7</source> 90 <target>1.7</target> 91 </configuration> 92 </plugin> 93 </plugins> 94 </pluginManagement> 95 <plugins> 96 <plugin> 97 <groupId>org.apache.maven.plugins</groupId> 98 <artifactId>maven-shade-plugin</artifactId>
<!-- 主要使用了Resource Transformers 做 Aggregatingclasses/resources
from several artifacts into one jar-->
99 <version>1.7</version> 100 <executions> 101 <execution> 102 <phase>package</phase> 103 <goals> 104 <goal>shade</goal> 105 </goals> 106 <configuration> 107 <!-- Optional Start --> 108 <finalName>Crunchify</finalName> 109 <shadedArtifactAttached>true</shadedArtifactAttached> 110 <shadedClassifierName>jar-with-dependencies</shadedClassifierName> 111 <!-- Optional End --> 112 113 <transformers> 114 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 115 <mainClass>com.crunchify.tutorial.CrunchifyMain</mainClass> 116 </transformer> 117 <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 118 <resource>META-INF/spring.handlers</resource> 119 </transformer> 120 <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 121 <resource>META-INF/spring.schemas</resource> 122 </transformer> 123 <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 124 <resource>META-INF/spring.tooling</resource> 125 </transformer> 126 </transformers> 127 </configuration> 128 </execution> 129 </executions> 130 </plugin> 131 132 </plugins> 133 </build> 134 </project>
3、一般的,如果是spring工程,打成可执行包的话在读取xml文件时会报错,这个时候需要在mvn中做些处理,生成一个runnable的jar,直接用mvn添加一些选项。这里其实也是使用了resouce transform
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.7</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalName>pc-guess-like-fsf-app</finalName> //1、可执行jar包名字 <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>jar-with-dependencies</shadedClassifierName> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.feiniu.recom.soa.consumer.pcGuessLike.FsfTest</mainClass> //2、这里是可执行jar包主类名字 </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> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>META-INF/spring.tooling</resource> </transformer> </transformers> </configuration>
</execution> </executions> </plugin>