繁体   English   中英

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

[英]Executing a JAR file straight from a Maven repository

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

据我所知,与库的主要区别在于相应的 JAR 文件包含一个具有适当main()方法的类,以及可选的 JAR 清单中的相关Main-Class:标头。 如果这样的工件被用作项目的依赖项,Maven 会很高兴地将 JAR 文件连同它的依赖项一起下载到本地存储库,就像它为任何其他工件所做的那样。

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

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

不,Maven 不会做你所要求的。 它是一个构建工具,旨在基于描述项目的 pom.xml 文件构建 Java 项目。

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

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

使用 Maven 3 的一个hacky 解决方案是将 Maven Dependency Plugin 与 Maven Help Plugin 结合使用来解析本地存储库路径:

# 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM