Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用maven从已部署工件运行主类_Java_Maven_Main_Artifact_Exec Maven Plugin - Fatal编程技术网

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

Java 使用maven从已部署工件运行主类,java,maven,main,artifact,exec-maven-plugin,Java,Maven,Main,Artifact,Exec Maven Plugin,我不明白。我已经将pom.xml设置为使用Maven exec插件,这样我就可以使用正确的类路径,-D defines和-javaagent执行项目中的一些类。因此,从一个内置了类的shell开始。/target/classes等。。我可以使用 mvn exec:java -Dexec:mainClass=classWithAMainMethod 到目前为止一切都很好 现在我想发布我的项目(一个jar工件),我仍然希望能够使用pom.xml中的配置来运行具有正确参数的类等。。我该怎么做?有什么

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

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似乎在工件jar的META-INF/maven中结束。有没有办法使用它

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


谢谢。

您是否尝试过使用类似的工具


这听起来像是你在寻找的东西。

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>

org.codehaus.mojo
appassembler maven插件
1.2.2
平的
解放党
-Djava.rmi.server.hostname=localhost
-javaagent:${spring.javaagent.jar}
foo1
net.foor.FooMain
...
在Eclipse中,我创建了一个外部工具启动器,以从target/appassembler/bin运行生成的脚本

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

  • 首先使用wget或mvn依赖项:获取我的工件jar的副本
  • 提取聚甲醛。解压-j artifact.jar*/pom.xml*
  • 运行mvn appassembler:assemble-DassembleDirectory=
  • 将artifact.jar移动到./lib目录中
  • 在./bin中设置对生成的shell脚本的执行权限

这给了我组装插件没有的东西(阴影除外)?它是否以某种方式“保留”pom.xml文件?问题不在于依赖关系。这是我想保留的exec插件的插件配置。谢谢这是一个比你想的更好的建议。这里的要点是,将所有依赖项打包到一个JAR中,您只需使用java命令行来运行main。只需从repo中获取一个JAR并调用main…2个简单命令。也许我应该改用这个插件。您如何设置${spring.javaagent.JAR}?