You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Maven Shade插件创建可跨机器运行的完整可执行UberJar?

How to Create an Executable Uber JAR with Maven Shade Plugin

Got it! The issue here is that your current shaded JAR doesn’t have the Main-Class entry in its manifest, which is why you have to use java -cp instead of the simpler java -jar command. Let’s fix that by updating your maven-shade-plugin configuration to include this critical manifest attribute.

Here’s how to modify your pom.xml’s build section:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.5.1</version> <!-- Use the latest stable version available -->
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <!-- This transformer adds the Main-Class to the JAR's manifest -->
            <transformers>
              <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>Weather</mainClass> <!-- Replace with full package path if needed, e.g., com.yourpackage.Weather -->
              </transformer>
            </transformers>
            <!-- Optional: Add additional transformers here if you need to handle duplicate resources or services -->
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Key Notes:

  • The ManifestResourceTransformer injects the Main-Class entry into the JAR’s META-INF/MANIFEST.MF file—this is what lets Java know which class to run when using java -jar.
  • Double-check that the <mainClass> value matches your actual main class (include the full package name if your class isn’t in the root package).
  • Specifying a plugin version ensures you’re using a stable, up-to-date release instead of relying on Maven’s default (which might be outdated).

After Updating:

  1. Re-run your build command: mvn clean package
  2. Now you can execute the JAR directly on any machine with Java installed using:
    java -jar target/uber-weather-lookup-1.0-SNAPSHOT.jar
    

Quick Verification:

To confirm the manifest is set correctly, unzip the JAR and check the META-INF/MANIFEST.MF file—you should see a line like:

Main-Class: Weather

That’s all you need to make your shaded JAR fully standalone!

内容的提问来源于stack exchange,提问作者Fat Owl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:47:46