直接从 Maven 存储库执行 JAR 文件

问题描述 投票:0回答:3

假设我们有一个 Java 应用程序,而不是一个库,可以通过 Maven 中心获得。例如,一个这样的项目是jol,它在 Maven 中心有相应的 CLI 界面。

据我所知,与库的主要区别在于相应的 JAR 文件包含一个具有适当

main()

 方法的类,以及可选的 JAR 清单中的相关 
Main-Class:
 标头。如果这样的工件用作项目的依赖项,Maven 会很乐意将 JAR 文件及其依赖项下载到本地存储库,就像对待任何其他工件一样。

是否可以使用Maven直接执行这样的应用程序,而无需设置Maven项目?

exec:java

插件
通过设置 JVM 类路径以使依赖项可用,可以很好地适用于本地项目。用户不必担心 JAR 或 .class
 文件位置等。不幸的是,据我所知,它还需要一个封闭的 Maven 项目,因此无法从任意命令行提示符中使用它。

java maven executable-jar execution
3个回答
4
投票
不,Maven 不会做你所要求的事情。它是一个构建工具,旨在基于描述项目的 pom.xml 文件构建 Java 项目。

因此,如果没有 pom.xml 文件,就无法运行 Maven 构建。 如果您有一个 pom.xml,那么根据定义,您已经“设置了一个 Maven 项目”。

正如 @DaveNewton 所说,您应该能够设置一个非常小的 pom.xml ,其中包含相关 jar 文件的依赖项和 exec-maven 插件。恐怕事情不会比这更简单了。


2
投票
使用 Maven 3 的一个 hacky 解决方案是结合使用 Maven 依赖插件和 Maven 帮助插件来解析本地存储库路径:

# Download JAR from Maven repo mvn dependency:get -DremoteRepositories=http://repo1.maven.org/maven2/ \ -DgroupId=some.group.id \ -DartifactId=some-artifact-cli \ -Dversion=1.0.0 \ -Dtransitive=false # Resolve local repository path MVN_REPO=$(mvn help:evaluate -Dexpression=settings.localRepository -q -DforceStdout) # Execute JAR from the local repository java -jar $MVN_REPO/some/group/id/some-artifact-cli/1.0.0/some-artifact-cli-1.0.0.jar
    

0
投票
您现在可以使用

ktx

 从 Maven 坐标执行 jar 文件。

例如:

ktx run com.github.ricksbrown:cowsay:1.1.0 hello
项目仓库中解释了用法:

https://github.com/mpetuska/ktx

© www.soinside.com 2019 - 2024. All rights reserved.