Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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
Java 从pom.xml下载依赖项的API_Java_Maven - Fatal编程技术网

Java 从pom.xml下载依赖项的API

Java 从pom.xml下载依赖项的API,java,maven,Java,Maven,我正在尝试编写一个java程序,该程序将maven pom.xml文件作为输入,并执行以下操作: 下载所有依赖项 将JAR添加到类路径 执行java代码(从JAR加载) 可能吗?任何要实现上述#1的示例代码都将受到极大的赞赏您的需求正是已经做过的。您的需求正是已经做过的。如果您必须在Java应用程序中嵌入此功能: Maven在幕后使用的用于进行依赖项解析的库称为Ether。如果您查看Sonatype站点上的,有一个如何执行步骤1的示例。依赖项解析过程的一部分将允许您访问依赖项列表,然后您可以循环

我正在尝试编写一个java程序,该程序将maven pom.xml文件作为输入,并执行以下操作:

  • 下载所有依赖项
  • 将JAR添加到类路径
  • 执行java代码(从JAR加载)

  • 可能吗?任何要实现上述#1的示例代码都将受到极大的赞赏

    您的需求正是已经做过的。

    您的需求正是已经做过的。

    如果您必须在Java应用程序中嵌入此功能:

    Maven在幕后使用的用于进行依赖项解析的库称为Ether。如果您查看Sonatype站点上的,有一个如何执行步骤1的示例。依赖项解析过程的一部分将允许您访问依赖项列表,然后您可以循环使用该列表来构建类路径

    对于步骤3,您可以使用ProcessBuilder并将目标Java应用程序作为使用Ether构建类路径的JVM的子进程启动

    如果可以使用shell脚本:

    您可以使用
    mvn依赖项:get-Dartifact=[group]:[artifact]:[version]
    将工件下载到本地repo

    然后您可以使用
    mvn dependency:buildclasspath
    生成类路径字符串

    然后,您可以使用-cp选项简单地执行java。您还必须知道您想要的主类是什么,或者您可以根据工件和版本号计算主jar的名称,并将其传递给-jar

    如果您能够在部署环境中获取主项目的pom.xml:


    您只需使用
    mvn exec:java-DmainClass=com.company.package.YourMainClass
    。这个选项到目前为止是最简单的,但它确实有在maven JVM中执行的缺点,而且据我所知,没有分叉单独进程的选项。此外,您还需要有一个成熟的pom来完成这项工作,这并不总是很方便。

    如果您必须在Java应用程序中嵌入此功能:

    Maven在幕后使用的用于进行依赖项解析的库称为Ether。如果您查看Sonatype站点上的,有一个如何执行步骤1的示例。依赖项解析过程的一部分将允许您访问依赖项列表,然后您可以循环使用该列表来构建类路径

    对于步骤3,您可以使用ProcessBuilder并将目标Java应用程序作为使用Ether构建类路径的JVM的子进程启动

    如果可以使用shell脚本:

    您可以使用
    mvn依赖项:get-Dartifact=[group]:[artifact]:[version]
    将工件下载到本地repo

    然后您可以使用
    mvn dependency:buildclasspath
    生成类路径字符串

    然后,您可以使用-cp选项简单地执行java。您还必须知道您想要的主类是什么,或者您可以根据工件和版本号计算主jar的名称,并将其传递给-jar

    如果您能够在部署环境中获取主项目的pom.xml:


    您只需使用
    mvn exec:java-DmainClass=com.company.package.YourMainClass
    。这个选项到目前为止是最简单的,但它确实有在maven JVM中执行的缺点,而且据我所知,没有分叉单独进程的选项。此外,您还需要一个成熟的pom来完成这项工作,这并不总是很方便。

    这正是Maven所做的-难道不可能让
    mvn
    为您完成这项工作吗?马上。。。您真的需要重新实现mvn吗?如果您需要在应用程序中嵌入该功能,您可以尝试包含一些Maven源代码,因为它是一个开源项目。或者,如果安装了Maven,您可以简单地在shell中调用
    mvn
    。Maven是开源的-下载代码,看看他们是如何做到的^^^看看,这将帮助您完成步骤#1这正是Maven所做的-难道不可能让
    mvn
    为您做到这一点吗?马上。。。您真的需要重新实现mvn吗?如果您需要在应用程序中嵌入该功能,您可以尝试包含一些Maven源代码,因为它是一个开源项目。或者,如果安装了Maven,您可以简单地在shell中调用
    mvn
    。Maven是开源的-下载代码,看看他们是如何做到的^^^看一看,这将帮助您完成步骤#1我们的要求是利用java程序的Maven功能。如果我没有弄错的话,Mojo允许从Maven执行java。我们的要求是在java程序中利用Maven的功能。如果我没有弄错的话,Mojo允许从Maven执行java。