【问题标题】:Running jar, setting classpath运行jar,设置类路径
【发布时间】:2011-01-08 20:13:00
【问题描述】:

我有一个使用 Maven 制作的项目。我用“mvn package”编译了一个 JAR,现在我想运行它,最好不要设置一些疯狂的类路径,因为它依赖于 Spring 和一半的互联网或其他东西。有什么方法可以让我轻松运行它吗?像“mvn run”这样的东西会很棒,或者将所有依赖项放入 jar 中以便我可以执行“java -jar”的选项也很棒。

您如何处理这个问题,您建议怎么做?因为导出基于 ~/.m2 的 CLASSPATH 可能会造成伤害 ;-)

【问题讨论】:

标签: java jar classpath maven


【解决方案1】:

使用Maven Assembly Plugin - 它会自动构建包含所有依赖项的 JAR,并且您可以设置主类参数以使 JAR 可执行。

文档可能会令人困惑,因此以下是您的 POM 的示例:

<build>
   <plugins>
       <plugin>
           <artifactId>maven-assembly-plugin</artifactId>
           <version>2.1</version>
           <configuration>
               <descriptorRefs>
                   <descriptorRef>jar-with-dependencies</descriptorRef>
               </descriptorRefs>
               <archive>
                   <manifest>
                       <mainClass>package.of.my.MainClass</mainClass>
                       <packageName>package.of.my</packageName>
                   </manifest>
               </archive>
           </configuration>
        </plugin>
   </plugins>
</build>

然后你可以运行为:

mvn assembly:assembly

【讨论】:

  • 感谢您的精彩回答。我在这个难题中缺少的部分是“mvn assembly:assembly” :-)
【解决方案2】:

设置CLASSPATH 和调用java -jar myjar.jar 无论如何都不起作用。因为java -jar 命令忽略了CLASSPATH 环境变量以及-cp 标志。

在这种情况下,您必须在 Class-Path 键处将类路径条目添加到 jar 的清单中,例如:

 Class-Path: jar1-name jar2-name directory-name/jar3-name

【讨论】:

  • 这是一个非常有用的答案。
【解决方案3】:

您需要查看Maven Assembly Plugin。然后,一旦你创建了插件所需的 XML 文件并修改了你的 POM 文件以使用插件,你可以运行它:

mvn assembly:assembly  

这将创建包含所有依赖项的 JAR。

【讨论】:

    猜你喜欢
    • 2012-02-06
    • 1970-01-01
    • 2011-03-24
    • 2023-03-04
    • 1970-01-01
    • 2013-12-17
    • 2012-06-02
    • 1970-01-01
    • 2013-01-11
    相关资源
    最近更新 更多