【问题标题】:Running main classes from a deployed artifact with maven使用 maven 从已部署的工件运行主类
【发布时间】:2012-05-26 02:23:07
【问题描述】:

我不明白。我已经将我的 pom.xml 设置为使用 Maven exec 插件,这样我就可以使用正确的类路径、-D 定义和 -javaagent 来执行我的项目中的一些类。因此,从带有内置类的外壳 ./target/classes 等。我可以使用

运行 main() 方法
mvn exec:java -Dexec:mainClass=classWithAMainMethod

到目前为止一切顺利。

现在我想发布我的项目(一个 jar 工件),我仍然希望能够使用我在 pom.xml 中放置的配置来运行具有正确参数等的类。我该怎么做它?有什么办法住吗

mvn -artifactJar=MyArtifact.jar exec:java -Dexec:mainClass=classWithAMainMethod

当我只有 MyArtifact.jar(或其中包含 MyArtifact.jar 的 maven 存储库)时?

我尝试了以下方法:

  • 获取带有dependency:get 目标的jar 并解压。我不能用它做任何事 因为 pom.xml 似乎最终出现在工件 jar 中的 META-INF/maven 中。有什么使用方法吗?

  • 创建一个虚拟 pom,我想在其中运行我的项目,只依赖我的项目工件。然后我可以使用 exec:java 来运行主类,但它不使用我的项目 pom 中的配置。

谢谢。

【问题讨论】:

标签: java maven main artifact exec-maven-plugin


【解决方案1】:

您是否尝试过使用 onejar 之类的东西?

这听起来像你要找的东西。

【讨论】:

  • 这给了我什么(除了阴影)程序集插件没有?它是否以某种方式“保留” pom.xml 文件?问题不在于依赖关系。这是我想保留的 exec 插件的插件配置。谢谢
  • 这是一个比你想的更好的建议。这里的要点是,将所有依赖项打包到一个 JAR 中,您只需使用 java 命令行来运行您的 main.jar 即可。只需从您的存储库中获取一个 JAR 并调用您的 main...2 个简单命令。
【解决方案2】:

AppAssembler 插件对我来说效果很好。我在构建部分用类似这样的东西替换了项目 pom 中的 exec 插件配置:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.2.2</version>
    <configuration>
        <repositoryLayout>flat</repositoryLayout>
        <repositoryName>lib</repositoryName>
        <extraJvmArguments>
            -Djava.rmi.server.hostname=localhost
            -javaagent:${spring.javaagent.jar}
        </extraJvmArguments>
        <programs>
            <program>
                <name>foo1</name>
                <mainClass>net.foor.FooMain</mainClass>
            </program>
               ...
    </configuration>
</plugin>

在 Eclipse 中,我创建了一个外部工具启动器来从 target/appassembler/bin

运行生成的脚本

在我想部署到的机器上(假设访问已安装/部署我的工件+依赖项的内部 Maven 存储库):

  • 首先使用 wgetmvn dependency:get 来获取我的工件 jar 的副本。
  • 提取 pom。 解压 -j artifact.jar */pom.xml*
  • 运行 mvn appassembler:assemble -DassembleDirectory=.
  • 将 artifact.jar 移到 ./lib 目录中
  • 在 ./bin 中设置生成的 shell 脚本的执行权限

【讨论】:

  • 你是如何设置 ${spring.javaagent.jar} 的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-26
  • 2012-07-09
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2018-09-08
相关资源
最近更新 更多