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
从Maven自动下载并运行独立Java应用程序_Java_Maven_Deployment_Aether - Fatal编程技术网

从Maven自动下载并运行独立Java应用程序

从Maven自动下载并运行独立Java应用程序,java,maven,deployment,aether,Java,Maven,Deployment,Aether,我希望有一个应用程序/脚本,可以用来从给定的Maven工件执行一个独立的Java应用程序(即带有主方法的基本类)。根据我的研究,目前还不存在类似的项目,但我想我会向社区提出这个问题,看看是否有人知道一个可以支持我需求的项目 我的想法是通过配置文件或命令行传入Maven工件规范(组ID、工件ID和版本),以及完全限定的类名和参数列表。然后将下载给定工件及其所有依赖项(如果它们已经在本地repo中,则不下载),并使用适当的类路径启动应用程序 在这一点上,我认为使用和Java的ProcessBuild

我希望有一个应用程序/脚本,可以用来从给定的Maven工件执行一个独立的Java应用程序(即带有主方法的基本类)。根据我的研究,目前还不存在类似的项目,但我想我会向社区提出这个问题,看看是否有人知道一个可以支持我需求的项目

我的想法是通过配置文件或命令行传入Maven工件规范(组ID、工件ID和版本),以及完全限定的类名和参数列表。然后将下载给定工件及其所有依赖项(如果它们已经在本地repo中,则不下载),并使用适当的类路径启动应用程序


在这一点上,我认为使用和Java的ProcessBuilder实现一个这样做的系统不会太困难,但我想知道在我开始重新发明轮子之前,是否有人知道已经有一个项目可以处理这个问题。

使用Maven运行应用程序非常简单。我想知道这是你正在看的东西还是我把问题搞错了

mvn exec:java -Dexec.mainClass="com.test.foo.Main" -Dexec.args="arg1 arg2..." 

也许这是显而易见的,但是为什么exec插件不能工作呢


如果com.project.App是另一个jar的一部分,您将像通常一样将其作为依赖项包含。

我刚刚推到Maven Central。它允许安装和执行存储库中的工件,并且不需要项目

它与诸如yum、apt或gem之类的包管理器非常相似:


mvn安装:安装-Dartifact=groupId:artifactId


这将创建一个指向路径上可用的类的快捷方式。

我已经完成了一件非常接近的事情,它有一个pom文件,指定了一个项目,该项目包含要作为依赖项运行的类。然后我运行“mvn包”,然后运行“mvn exec:java”来运行该类。要对任意类执行此操作,需要对pom文件进行动态修改。@Chris,正如其他几个人所指出的,这是一个好主意。我只是拼凑了一个快速pom作为概念证明,你甚至不需要运行“mvn包”。我将虚拟项目的打包设置为“pom”,然后直接运行“mvn exec:java”。这就是堆栈溢出真正开始工作的地方:感谢您的帮助!应该能够帮助下载工件使用他们的Maven坐标我不知道为什么我没有想到这一点。我使用了exec插件来运行当前项目中的类,但我甚至没有想到仅仅将我的目标工件添加为一个依赖项。我很高兴在编写自己的实现之前问了这个问题。谢谢我刚刚意识到这个解决方案的一个不利方面是STDOUT被所有Maven输出搞得一团糟。这不是一个大问题,但它确实使我的特定应用程序不太理想。是的。。。但整个方法(使用Maven作为一次性命令执行的安装程序兼执行器)既笨重又低效:下载插件和依赖项。有更好的方法;e、 下载一个可执行的uber JAR文件。一个人的低效下载是另一个人的高效开发工作。对于我们这个研究实验室来说,我们不希望有太多的用户,而且资源有限。让maven做双重任务让事情变得简单。这看起来很不错。实际上,我们最终在mvn之外编写了自己的小实用程序来做一些非常类似的事情。mvn命令需要很长时间才能运行,即使插件没有做任何工作,所以我们一起放弃了它,只编写了一些bash脚本来进行下载和设置类路径。它不是完全通用的,但对我们来说效果很好。嗯,安装总是需要时间:-)当安装工具时,它会创建快捷方式并在Maven之外的系统上运行。
mvn exec:java -Dexec.mainClass=com.project.App