Maven Dependency Analyzer:如何解决“提供”范围的问题?

时间:2018-08-03 10:43:33

标签: maven dependency-management maven-dependency-plugin

我已经开始在构建中使用maven-dependency-plugin:analyze-only来清理POM。基本上,我们希望所有依赖项都在POM中声明,而不是依赖于将用于编译的传递性依赖项。

这很好,但是我在provided范围上遇到了问题。我们定义了一个包含所有Java EE依赖项的POM(我们使用的是JBoss EAP)。当然,所有JEE API都必须具有provided范围。这就是我们执行以下操作的原因:

<dependency>
  <groupId>foobar</groupId>
  <artifactId>jee7-api</artifactId>
  <scope>provided</scope>
  <type>pom</type>
</dependency>

其中包含

<groupId>foobar</groupId>
<artifactId>jee7-api</artifactId>
<packaging>pom</packaging>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.jboss.eap</groupId>
      <artifactId>jboss-eap-parent</artifactId>
      <version>${jboss-eap-parent.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.spec</groupId>
      <artifactId>jboss-javaee-7.0</artifactId>
      <version>${jboss-javaee-7.0.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
<dependencies>
  <dependency>
    <groupId>org.jboss.spec.javax.annotation</groupId>
    <artifactId>jboss-annotations-api_1.2_spec</artifactId>
  </dependency>
  <dependency>
    <groupId>org.jboss.spec.javax.batch</groupId>
    <artifactId>jboss-batch-api_1.0_spec</artifactId>
  </dependency>
  ... etc. etc.
</dependencies>

这对于构建很有效,但是Dependency Analyzer抱怨:

[INFO] --- maven-dependency-plugin:3.1.1:analyze-only (analyze-dependencies) @ my-project ---
[WARNING] Used undeclared dependencies found:
[WARNING]    org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final-redhat-1:provided
[WARNING]    javax.inject:javax.inject:jar:1.0.0.redhat-6:provided
[WARNING]    javax.validation:validation-api:jar:1.1.0.Final-redhat-1:provided
[WARNING]    xml-apis:xml-apis:jar:1.0.b2:test
[WARNING]    javax.enterprise:cdi-api:jar:1.2.0.redhat-2:provided
[WARNING]    org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final-redhat-1:provided

我在做什么错了?

我知道我可以打开插件的ignoreNonCompile,但是我想检查所有依赖范围。

1 个答案:

答案 0 :(得分:0)

我在org.eclipse.persistence:javax.persistence和javaee-api(版本7)中也遇到了类似的问题,只需更改pom中出现的顺序就可以摆脱警告。我将javax.persistence依赖项放在javaee-api依赖项之前(这意味着如果您有多个警告,则后者必须排在最后)。

PS:我不像您那样使用pom工件...