欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IDEA+Maven install打可运行jar包

程序员文章站 2024-03-14 15:00:04
...

一、用途

简单直接的想法就是想通过打出来的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>