Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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
Maven 有没有办法只获取一个特定依赖项的运行时依赖项?_Maven - Fatal编程技术网

Maven 有没有办法只获取一个特定依赖项的运行时依赖项?

Maven 有没有办法只获取一个特定依赖项的运行时依赖项?,maven,Maven,我有一个多模块maven项目。一些模块是其他模块的依赖项,而一个单独的项目[commons repo]中的模块是我的主项目中的依赖项 我能够创建一个中间模块来收集我能够传递的运行时JAR,但是当我尝试将相同的代码合并到不同的模块中时,它会提取所有的运行时JAR,而不仅仅是特定的依赖项。代码如下 GroupID B是我们跨多个项目使用的外部“公共”项目 <dependency> <groupId>B</groupId> <artifac

我有一个多模块maven项目。一些模块是其他模块的依赖项,而一个单独的项目[commons repo]中的模块是我的主项目中的依赖项

我能够创建一个中间模块来收集我能够传递的运行时JAR,但是当我尝试将相同的代码合并到不同的模块中时,它会提取所有的运行时JAR,而不仅仅是特定的依赖项。代码如下

GroupID B是我们跨多个项目使用的外部“公共”项目

<dependency>
     <groupId>B</groupId>
     <artifactId>B.artifact2</artifactId>
     <version>${B.version}</version>
</dependency>   

B
B.人工制品2
${B.version}
我能够创建一个单独的[intermediate]模块,其中只有B.artifact2作为唯一的依赖项,并使用以下代码将运行时JAR拉入它们自己的${project.build.directory}/target文件夹

<artifactId>maven-dependency-plugin</artifactId>
<version>${maven-dependency-plugin.version}</version>
<executions>
  <execution>
    <id>1</id>
    <phase>prepare-package</phase>
    <goals>
      <goal>copy-dependencies</goal>
    </goals>
    <configuration>
      <includeScope>runtime</includeScope>
      <excludeGroupIds>com.google.code.findbugs,net.jcip</excludeGroupIds>
      <outputDirectory>${project.build.directory}/dependency-jars</outputDirectory>
    </configuration>
  </execution>
maven依赖插件
${maven dependency plugin.version}
1.
准备包装
复制依赖项
运行时
com.google.code.findbugs,net.jcip
${project.build.directory}/dependency jars
这非常有效[为我提供了所需的~15罐],但我们不想使用中间模块。我试图将其合并到主模块中[中间层将是其依赖项],但我无法仅选择该特定依赖项来获取运行时JAR,而是将几乎所有运行时依赖项拉入文件夹。该项目如下所示:

    <dependency>
        <groupId>A</groupId>
        <artifactId>A.artifact</artifactId>
        <version>${A.version}</version>
        <classifier>dist</classifier>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>B</groupId>
        <artifactId>B.artifact1</artifactId>
        <version>${B.version}</version>
    </dependency>
    <dependency>
        <groupId>B</groupId>
        <artifactId>B.artifact2</artifactId>
        <version>${B.version}</version>
    </dependency>

A.
人工制品
${A.version}
距离
罐子
B
B.人工制品1
${B.version}
B
B.人工制品2
${B.version}
我在这个模块中有多个依赖项,使用下面的方法仍然可以提取所有运行时依赖项[~40 jar]

      <execution>
          <id>test</id>
          <phase>package</phase>
          <goals>
              <goal>copy-dependencies</goal>
          </goals>
          <configuration>
              <includeScope>runtime</includeScope>
              <excludeGroupIds>A,C,D,com.google.code.findbugs,net.jcip</excludeGroupIds>
              <outputDirectory>${project.build.directory}/dependency-jars</outputDirectory>
          </configuration>
      </execution>

测试
包裹
复制依赖项
运行时
A、 C,D,com.google.code.findbugs,net.jcip
${project.build.directory}/dependency jars
如果我尝试将其限制为B.artifact2,我只从B.artifact2获得工件,而不是它的运行时JAR/依赖项


我是否被迫使用中间模块,然后将其用作主模块的依赖项?

在我看来,您一开始使用
复制依赖项就走错了方向

在Maven中,您不会通过复制依赖项来处理依赖项,而是在POM的dependencies部分中定义它们,并从Maven存储库中提取它们

在公司中,您通常在服务器上运行Nexus/Artifactory并使用它


如果您的项目很小,并且您只是一名开发人员,那么您也可以使用Maven本地存储库。在任何情况下,都不要试图将依赖项从一个项目复制到另一个项目。

在我看来,首先使用
复制依赖项是错误的

在Maven中,您不会通过复制依赖项来处理依赖项,而是在POM的dependencies部分中定义它们,并从Maven存储库中提取它们

在公司中,您通常在服务器上运行Nexus/Artifactory并使用它

如果您的项目很小,并且您只是一名开发人员,那么您也可以使用Maven本地存储库。在任何情况下,都不要试图将依赖项从一个项目复制到另一个项目。

您“复制(maven)依赖项”(在“打包”过程中使用“复制依赖项”)……是相当少见的/“一种气味”!1.你为什么这么做。。。请阅读“maven依赖项(范围运行时)”,特别是“maven导入pom”!;)。。。深入到“maven assembly”…但标题问题是:“有没有办法只获取一个特定依赖项的运行时依赖项?”-对于maven来说听起来“非常可行”。你“复制(maven)依赖项”(在“打包”过程中使用“复制依赖项”)…是相当少见的/“一种气味”!1.你为什么这么做。。。请阅读“maven依赖项(范围运行时)”,特别是“maven导入pom”!;)。。。深入到“maven assembly”…但标题问题是:“有没有一种方法可以只获取一个特定依赖项的运行时依赖项?”-听起来maven“非常可行”。