创建一个具有可执行 class 文件的 uberjar
Creating an uberjar that has executable class file
我使用 maven-shade-plugin 进行构建,执行 mvn-clean-package 并能够从目标目录中执行代码,如下所示:
java -cp uber-weather-lookup-1.0-SNAPSHOT.jar Weather
但是,我对如何创建一个包含所有内容的可执行 jar 文件感到有点困惑,以便该 jar 文件可以 运行 在单独的机器上 - 所有内容都捆绑在其中
我的pom文件的构建部分如下
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>uber-${artifactId}-${version}</finalName>
</configuration>
</plugin>
</plugins>
然后我像这样做 maven 包:mvn clean package
。
运行
java -jar target/uber-weather-lookup-1.0-SNAPSHOT.jar
生成以下错误
no main manifest attribute, in target/uber-weather-lookup-1.0-SNAPSHOT.jar
。
我是新手,所以有人可以告诉我我做错了什么吗?
使用 maven-jar-plugin
指定主要 class
您可能还需要使用 maven-assembly-plugin 来打包您的依赖项(我一直很难弄清楚何时使用 assembly 与 shade 插件)
看看这个答案的例子 -
我使用 maven-shade-plugin 进行构建,执行 mvn-clean-package 并能够从目标目录中执行代码,如下所示:
java -cp uber-weather-lookup-1.0-SNAPSHOT.jar Weather
但是,我对如何创建一个包含所有内容的可执行 jar 文件感到有点困惑,以便该 jar 文件可以 运行 在单独的机器上 - 所有内容都捆绑在其中 我的pom文件的构建部分如下
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
<configuration>
<finalName>uber-${artifactId}-${version}</finalName>
</configuration>
</plugin>
</plugins>
然后我像这样做 maven 包:mvn clean package
。
运行
java -jar target/uber-weather-lookup-1.0-SNAPSHOT.jar
生成以下错误
no main manifest attribute, in target/uber-weather-lookup-1.0-SNAPSHOT.jar
。
我是新手,所以有人可以告诉我我做错了什么吗?
使用 maven-jar-plugin
指定主要 class您可能还需要使用 maven-assembly-plugin 来打包您的依赖项(我一直很难弄清楚何时使用 assembly 与 shade 插件)
看看这个答案的例子 -