使用maven从已部署的工件运行主类

时间:2012-05-18 13:46:45

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

我不明白。我已经设置了我的pom.xml以使用Maven exec插件,因此我可以使用正确的类路径执行项目中的一些类,-D define和-javaagent。所以从一个带有./target/classes等内置类的shell。我可以使用

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

到目前为止一切都很好。

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

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

当我拥有的是MyArtifact.jar(或者包含MyArtifact.jar的maven存储库)?

我尝试了以下内容:

  • 获取具有依赖关系的jar:获取目标并解压缩。我无能为力 因为pom.xml似乎最终出现在神器罐中的META-INF / maven中。有没有办法使用它?

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

感谢。

2 个答案:

答案 0 :(得分:1)

您是否尝试使用onejar之类的内容?

这听起来像你正在寻找的。

答案 1 :(得分:1)

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存储库):

  • 首先使用 wget mvn依赖:获取以获取我的神器jar的副本。
  • 提取pom。 unzip -j artifact.jar * /pom.xml *
  • 运行 mvn appassembler:assemble -DassembleDirectory =。
  • 将artifact.jar移动到./lib目录
  • 在./bin
  • 中设置生成的shell脚本的执行权限