2

我不明白。我已经将我的 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 存储库)时?

我尝试了以下方法:

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

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

谢谢。

4

2 回答 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 脚本的执行权限
于 2012-05-20T14:36:10.377 回答
1

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

这听起来像你在找什么。

于 2012-05-18T14:00:26.770 回答