IDEA+Maven install打可运行jar包
IDEA+Maven install打可运行jar包
一、用途
简单直接的想法就是想通过打出来的jar能够直接java -jar 运行,主要是想做一些小的工具运行程序,比如加解密的小程序
其实idea和eclipse等编程工具本身就支持工程打jar ,但是这种方式打出来的jar一般都是缺少程序主清单,不能运行,所以我们考虑用maven-assembly-plugin
二、配置Maven编译插件
1、新建mavan项目
这个就不用说了,比如我们这里想弄一个加解密的小程序,例如:DESUtil工具类
2、引入maven配置
在pom.xml里面加入:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<!-- 这里配置你的程序入口main -->
<mainClass>util.DESUtils</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
打包方式:
这种如果package必须要加上 assembly:single,否则只会生成一个test-1.0-SNAPSHOT.jar(这里的test是项目名), 且运行时会报错:jar中没有主清单属性
需要执行以下命令:
mvn package assembly:single
打包后会在target目录下生成一个test-jar-with-dependencies.jar文件,这个文件不但包含了自己项目中的代码和资源,还包含了所有依赖包的内容。所以可以直接通过java -jar来运行
如果不想这么麻烦,想直接在idea中maven package打包的话,加上如下配置:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<archive>
<manifest>
<!-- 这里配置你的程序入口main -->
<mainClass>util.DESUtils</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>
</plugins>
</build>
其中package、single即表示在执行package打包时,执行assembly:single,所以可以直接使用mvn package打包
三、注意事项
如果我们maven的settings.xml里面配置的镜像地址是私服,这里最好改成maven仓库,因为maven-assembly-plugin有很多的级联引用jar,不改成maven仓库地址的话,打包的很容易报缺少Class的异常
例如:
A required class was missing while executing org.apache.maven.plugins:maven-assembly-plugin:2.2-beta-5:single: Lorg/apache/maven/shared/filtering/MavenFileFilter;
更改settings.xml
<mirror>
<id>mirrorId</id>
<mirrorOf>repositoryId</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://my.repository.com/repo/path</url>
</mirror>