【问题标题】:Executing a JAR file straight from a Maven repository直接从 Maven 存储库执行 JAR 文件
【发布时间】:2014-09-13 14:00:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我可能只是用一个 shell 脚本来包装像 stackoverflow.com/questions/1776496/… 这样的东西,然后执行下载的工件。或者编写一个简单的程序来与 Maven 存储库对话,并可以获取一个工件并完全跳过 Maven。
  • @DaveNewton:获取 JAR 文件并不是唯一的问题。例如,exec:java 将设置 JVM 类路径,以便依赖关系可用。 就是我所追求的……
  • 您可以通过编程方式获取 jar 的依赖项并执行相同的操作。无论如何,如果您安装了 Maven,那么使用您的顶级依赖项创建一个临时项目就是一个非常小的 POM 文件。为什么不能即时创建项目?有什么问题?
  • @DaveNewton:我想主要问题是我不喜欢重新发明轮子,如果已经存在解决方案的话。此外,使用脚本正确并不是那么简单(或者说便携)...

标签: java maven executable-jar execution


【解决方案1】:

不,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
    

    【讨论】:

      猜你喜欢
      • 2018-04-08
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多