创建一个具有可执行 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 插件)

看看这个答案的例子 -