标签: maven-dependency-plugin

Maven:在测试之前提取依赖性资源

我有一个多模块Maven项目.一个子项目托管XSL/XML资源文件.另一个项目托管需要在单元测试中使用这些文件的Java代码.

在依赖项的jar中,资源位于文件夹中xml-resources.

我找到了这个例子,并试图根据我的需要改变它:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.4</version>
  <executions>
    <execution>
      <id>resource-dependencies</id>
      <phase>process-test-resources</phase>
      <goals>
        <goal>unpack-dependencies</goal>
      </goals>
      <configuration>
        <classifier>xml-resources</classifier>
        <outputDirectory>${project.build.directory}/classes/xml-resources</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

当我运行process-test-resources阶段时,这没有任何作用.我确定那里有一些错误 - 我没有看到我可以在哪里指定资源应该从中获取的依赖关系,并且<classifier>似乎没有实际指定应该从中复制资源的源.

我迷失在这里,有人可以告诉我该怎么做对吗?

maven-2 maven maven-dependency-plugin

6
推荐指数
1
解决办法
6096
查看次数

Maven归档程序在类路径中使用未锁定的快照,但复制依赖项复制锁定的快照

我正在尝试使用maven-jar-plugin和maven-dependency-plugin来创建我的应用程序的可运行"包".它在大多数情况下工作正常,但是当我在依赖关系层次结构中有快照时,复制依赖关系目标似乎将快照依赖关系转换为锁定快照(带时间戳的快照)

但是,archiver-plugin中的addClasspath不会转换快照依赖项:

  • 在lib中,有foolib-1.0.1-20130108.143522-8.jar
  • classpath包含lib/foolib-1.0.1-SNAPSHOT.jar

所以我无法运行该应用程序.

我找不到一种方法来告诉copy-dependencies不转换SNAPSHOTs或者告诉archiver-plugin转换SNAPSHOTs.

这是pom.xml的相关片段:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>          
    <artifactId>maven-dependency-plugin</artifactId>           
    <version>2.5.1</version>                  
    <executions>
        <execution>
            <id>copy-libs</id>
            <phase>package</phase>    
            <goals>
                <goal>copy-dependencies</goal>                          
            </goals>
            <configuration>
                <excludeScope>provided</excludeScope>
                <outputDirectory>${package.dest}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
        <outputDirectory>${package.dest}</outputDirectory>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>${main.class}</mainClass>
            </manifest>
        </archive>
        </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

maven maven-jar-plugin maven-dependency-plugin

6
推荐指数
1
解决办法
1729
查看次数

Maven 2.1依赖:分析.传递依赖:使用未声明的依赖关系

我正在使用它dependency:analyze来检测依赖性问题.但我发现传递依赖项存在问题,因为插件无法解析此依赖项.

当我执行mvn dependency:tree时,输出显示传递依赖项.

依赖

project A
  dependency B
project C
  dependency A
Run Code Online (Sandbox Code Playgroud)

Outuput - >(项目C - 路径)/ mvn clean install

[WARNING] Used undeclared dependencies found:
   dependency B: compile
Run Code Online (Sandbox Code Playgroud)

插入

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.4</version>
    <executions>
        <execution>
            <id>analyze</id>
            <phase>verify</phase>
            <goals>
                <goal>analyze-only</goal>
            </goals>
            <configuration>
                <failOnWarning>true</failOnWarning>
            </configuration>
       </execution>
   </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

为什么插件不会检测传递依赖性

java maven-2 maven maven-dependency-plugin

6
推荐指数
1
解决办法
4165
查看次数

Maven - 依赖关系管理中的多个工件版本

是否有一个有效的用例,在POM的依赖关系管理部分中有两个不同版本的同一工件?

我正在看一个根POM包含这样一个例子的项目.项目本身有多个模块,使用不同版本的"重复依赖".因此,一些模块必须在它们的依赖关系中明确地指定工件的版本,以便区分这两者.

如果模块的POM文件必须指定版本,那么在父级的依赖关系管理中复制的原因是什么?即使从依赖关系管理中删除了依赖关系也会被正确查找,那么为什么要首先将它复制到那里呢?

我只是想弄清楚这是不是很好的做法,或者是否有更好的解决方案来应对这种情况.

maven-3 maven maven-dependency-plugin

6
推荐指数
1
解决办法
1万
查看次数

Spring启动核心依赖关系被maven-dependency-plugin视为未使用

maven-dependency-plugin将spring boot依赖项检测为未使用,但实际上它们需要运行我的应用程序.我会犯错吗?

我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <artifactId>my-service</artifactId>
    <packaging>jar</packaging>
    <name>my-service</name>
    <description>my service</description>

    <parent>
        <groupId>com.my</groupId>
        <artifactId>parent</artifactId>
        <version>0.2.0-SNAPSHOT</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>javax.ws.rs</groupId>
                    <artifactId>jsr311-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency> …
Run Code Online (Sandbox Code Playgroud)

java maven-dependency-plugin spring-boot

6
推荐指数
2
解决办法
1962
查看次数

如何让maven构建在重复依赖项上失败?

如果我有两个在同一个pom中相同的依赖项,我希望构建失败.目前,我可以使用Maven Dependency Plugin的"analyze-duplicate"检测它.然而,像其他一些人一样没有failOnWarning选项(另外,它在Info级别打印,而不是警告).有没有替代扩展这个?

java dependency-management maven maven-dependency-plugin

6
推荐指数
1
解决办法
658
查看次数

OWASP 依赖项检查 Maven 与命令行结果不同

在 Maven 项目中,我运行 OWASP dependency-check-maven 插件以及 OWASP 命令行工具,以便生成包含存在漏洞的依赖项的报告。

我无法理解的是这两个工具是如何运作的。具体来说,我注意到 Maven 插件 (dependency-check-maven) 报告了 45 个易受攻击的依赖项,而命令行工具报告了 34 个。

例如,Maven 插件将undertow-core-1.2.9.Final.jar(由依赖项提供的undertow-servlet)报告为存在严重漏洞,而通过命令行检查,该依赖项根本不会出现在列表中。我正在使用以下命令运行命令行工具:

dependency-check --project "myProject" --scan "C:\path\myProject" --disableRetireJS
Run Code Online (Sandbox Code Playgroud)

难道命令行工具会扫描项目目录中现有的 jar 文件,而 Maven 插件会遍历 中定义的依赖项吗pom.xml

java owasp maven maven-dependency-plugin owasp-dependency-check

6
推荐指数
1
解决办法
1626
查看次数

分析版本 17 时“未找到依赖项”

我正在研究的项目之一具有以下相关配置:

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <failOnWarning>true</failOnWarning>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>analyze-only</goal>
            </goals>
        </execution>
    </executions>
</plugin>


<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest</artifactId>
    <version>2.2</version>
    <!-- not scoped to test -->
</dependency>
Run Code Online (Sandbox Code Playgroud)

执行mvn clean verify(apache-maven-3.6.3,java:17-ea)时,构建按预期成功。我现在对属性进行了更改,将 源和目标替换为发布:

<maven.compiler.release>17</maven.compiler.release>
Run Code Online (Sandbox Code Playgroud)

终端上的日志显示

[INFO] --- maven-dependency-plugin:3.2.0:analyze-only (default) @ java-8-matchers ---
[WARNING] Non-test scoped test only dependencies found:
[WARNING]    org.hamcrest:hamcrest:jar:2.2:compile
Run Code Online (Sandbox Code Playgroud)

导致失败(因为警告)!为什么/如何在 Java 版本中升级时对依赖关系进行不同的处理?有任何解决这个问题的方法吗?


如果可能有帮助,此目标的调试日志如下:

[DEBUG] Configuring mojo org.apache.maven.plugins:maven-dependency-plugin:3.2.0:analyze-only from plugin realm ClassRealm[plugin>org.apache.maven.plugins:maven-dependency-plugin:3.2.0, parent: jdk.internal.loader.ClassLoaders$AppClassLoader@579bb367]
[DEBUG] Configuring mojo 'org.apache.maven.plugins:maven-dependency-plugin:3.2.0:analyze-only' with basic configurator -->
[DEBUG]   (f) analyzer …
Run Code Online (Sandbox Code Playgroud)

java maven maven-dependency-plugin java-17

6
推荐指数
1
解决办法
6089
查看次数

mvn dependency:tree -Dverbose 挂起并且永远不会完成

我的项目中的传递依赖项存在版本冲突,我正在尝试使用它mvn dependency:tree -Dverbose来查找版本冲突。然而,每当我运行时mvn dependency:tree -Dverbose,它就会挂起并且永远不会完成。我尝试使用调试模式(mvn --debug dependency:tree -Dverbose)来找出发生了什么,似乎它正在连接到成百上千个存储库,而我在项目中的任何地方都没有定义这些存储库,编写跟踪文件,使用连接器,使用传输器等。 ..... 请参阅这里的pastebin,了解它在几个小时内所做的事情的一小段:https://pastebin.com/raw/L3z4u5Hj

当我不包含该标志时,这种情况不会发生-Dverbosemvn dependency:tree它本身非常快速,并且在几秒钟内完成。

此外,对于我拥有的任何其他存储库或代码库都不会发生这种情况:只有一个特定的存储库或代码库。但显然我不知道这个代码库与其他代码库有什么不同,只是依赖关系不同(假设某些依赖关系是问题的原因。)

似乎官方 Maven 邮件列表上的人也遇到了这个问题,但似乎他们也永远无法解决它: https: //www.mail-archive.com/users@maven.apache.org/msg143124。 html

任何帮助,将不胜感激。如果我无法弄清楚这一点,我将不得不一一删除依赖项,直到找到导致问题的依赖项,这将需要很长时间,因为这是一个非常大的代码库。

Maven版本:

Apache Maven 3.6.0
Maven home: /usr/share/maven
Java version: 11.0.10, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-54-generic", arch: "amd64", family: "unix"
Run Code Online (Sandbox Code Playgroud)

maven-3 maven maven-dependency-plugin

6
推荐指数
1
解决办法
4322
查看次数

如何获取 Maven 项目的外部依赖项的聚合列表?

我有一个大型多模块 Maven 项目,它有大量的依赖项。我想生成一个完整的、经过重复过滤的第三方依赖项列表(即,所有不使用项目组 ID 的依赖项)。

我已尝试用于mvn dependency:list -DexcludeGroupIds=org.example.projectx此目的,但似乎无法将输出聚合到单个列表中。当我从项目根命令行运行该命令时,我得到如下输出:

[...]
[INFO] ------------------------------------------------------------------------
[INFO] Building ProjectX: ModuleA - Datatypes 4.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ projectx-moda-datatypes ---
[INFO] 
[INFO] The following files have been resolved:
[INFO]    org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO]    org.hamcrest:hamcrest-core:jar:1.3:test
[INFO]    junit:junit:jar:4.12:test
[INFO]    com.google.guava:guava:jar:18.0:compile
[INFO] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building ProjectX: ModuleB - Binary 4.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ projectx-modb-binary ---
[INFO] 
[INFO] The following files have been resolved:
[INFO]    org.slf4j:slf4j-api:jar:1.7.10:compile
[INFO]    com.google.guava:guava:jar:18.0:compile
Run Code Online (Sandbox Code Playgroud)

..等等,对于每个子模块。这不仅不是单个列表(而是每个子模块的单独列表),而且正如您所看到的,它包含重复项。此外,我感兴趣的实际输出隐藏在其他 …

java maven-3 maven maven-dependency-plugin

5
推荐指数
1
解决办法
5560
查看次数