在没有pom.xml文件的情况下运行mvn exec:exec

17

我正在尝试找到一种方法,只从Maven仓库中获取并运行库。我希望通过命令行定义一切,忽略pom文件。我正在尝试以下操作:

 mvn exec:exec -Dexec.mainClass="org.main.Class" -Dspring.profiles.active=test
当我尝试使用pom.xml运行它时,它开始获取pom中描述的所有依赖项。而这不是我想要的。如果我没有pom.xml运行它,它会显示目标需要执行项目,但在此目录中没有POM文件。请验证您是否从正确的目录调用了Maven。 是否有一种方法可以在没有pom的情况下运行它或至少忽略它?
我的目标只是从任何地方启动我的应用程序,而不需要源代码或JAR文件。

1
你尝试过添加"-DrequiresProject=false"吗? - Ivan
我刚刚尝试过了,但仍然显示相同的“目标需要一个项目来执行...” - Vojtěch
另一种选择是在pom.xml中创建一个单独的配置文件,其中仅包含maven-exec-plugin,并且另一个配置文件默认情况下激活,包含所有依赖项和其他插件。 - Ivan
2个回答

7

一种可能的解决方法是:

  • 先获取jar包
  • 再执行它

为此,Maven插件 dependency:get 很方便,并且可以在没有任何pom.xml / project(因此从任何想要的文件夹)的情况下执行。

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:get -DrepoUrl=https://dtp.intramundi.com/nexus/repository/maven-central/ -Dartifact=<group>:<artifact>:<version>

一旦你将工件复制到所选文件夹中,像dependency:copy-dependencies这样的插件可以读取刚获取的工件的pom.xml,并将其依赖项复制到相同的文件夹中。
最后,java -cp . yourArtifact.jar可以执行它。
我意识到这不像"exec:exec"那么直截了当,并且它从pom.xml中获取依赖项,但至少这里:
  • 第一步不需要任何pom.xml,
  • 第二步需要你想要执行的工件的pom.xml,并且这些依赖项可能在运行时需要:如果你想要'exec'你的工件,你无论如何都需要这些。

我可以在“-Dartifact”部分指定分类器吗? - NanoNova
1
@NanoNova 是的,考虑到该构件是一个形如 groupId:artifactId:version[:packaging[:classifier]] 的字符串。但您也可以使用 --classifier=...。请参见 https://maven.apache.org/plugins/maven-dependency-plugin/get-mojo.html。 - VonC
谢谢,缺少打包部分让我很头疼。 - NanoNova

0
不行。这是不可能的。Mvn Exec实际上是一种专用于在maven项目中执行某些操作的Maven插件。如果您需要执行Jar文件,为什么不直接使用java ***.jar呢?

1
因为类路径不会设置所有必要的传递依赖项,以执行该jar中的代码。 - Ken Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接