Maven- 使用Maven构建一个可执行jar

Posted niaomingjian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven- 使用Maven构建一个可执行jar相关的知识,希望对你有一定的参考价值。

How to Create an Executable JAR with Maven

1.最重要的是使用jar类型,<packaging>jar</packaging>。当然不指定的话,默认Maven使用的就是jar。

2.利用maven-dependency-plugin来手动创建(方法一

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    ${project.build.directory}/libs
                </outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

①. goal被指定为copy-dependencies,意思是将所有的依赖拷贝到指定的outputDirectory中。例子中是在项目构建文件夹(通常是target文件夹)中创建一个libs文件夹。

②. 使用对①中依赖的连接,创建可执行的、类路径感知的jar。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>libs/</classpathPrefix>
                <mainClass>
                    org.baeldung.executable.ExecutableMavenJar
                </mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

manifest配置,追加一个前缀为libs的classpath,提供了main class的信息——main class的完全限定名。

评价

优点:透明的过程使得我们可以在这里指定每一步

缺点:手动做,依赖不在最终的jar中。意味着可执行jar只在libs文件夹对jar可访问并可见时才能运行。

2.2 Apache Maven Assembly Plugin

Apache Maven Assembly Plugin让用户汇总项目的输出到一个可执行包中,包括它的依赖,模块,站点文档,其他文件。

主要的goal是single,用来创建所有的assemblies。

 

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
            <configuration>
                <archive>
                <manifest>
                    <mainClass>
                        org.baeldung.executable.ExecutableMavenJar
                    </mainClass>
                </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
        </execution>
    </executions>
</plugin>

也需要提供main class的信息。不同的是它会自动拷贝所有需要的依赖到jar文件中。

descriptorRef提供了一个名字,它被用于加到项目名上。

 

可参考Links:

1. maven-assembly-plugin/usage

2. Pre-defined Descriptor Files

 

以上是关于Maven- 使用Maven构建一个可执行jar的主要内容,如果未能解决你的问题,请参考以下文章

[Maven]Maven构建可执行的jar包(包含依赖jar包)

使用 `publishToMavenLocal` 构建可以发布到 maven 本地 repo 的可执行 jar - spring boot 项目

Apache Maven 打包可执行jar

Dubbo-使用Maven构建Dubbo服务的可执行jar包

maven工程编译并生成可执行JAR包命令

学习dubbo:使用maven构建dubbo服务的可执行的jar