Maven为什么使用提供的构建插件的pom.xml?

时间:2019-03-23 20:10:57

标签: java maven plugins build pom.xml

我们确实有一个简单的maven pom,例如

<project xmlns="http://maven.apache.org/POM/4.0.0">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.xy.project.z</groupId>
  <artifactId>client</artifactId>
  <packaging>pom</packaging>

  <build>
    <plugins>
      <plugin>
        <groupId>org.xy.maven</groupId>
        <artifactId>own-maven-plugin</artifactId>
        <version>1.19.0</version>
        <executions>...</executions>
      </plugin>
    </plugins>
  </build>
</project>

您可能会猜到own-maven-plugin是我们在另一个项目中创建的具有独立版本的maven插件。到目前为止没有问题。但是(至少对我来说)提供的pom不再运行了。它停止并显示以下消息:

Caused by: org.eclipse.aether.transfer.ArtifactNotFoundException: Failure to find org.xy.projcect:a:bundle:1.0.7-SNAPSHOT in http://repo.local:8081/repository/maven-public/ was cached in the local repository, resolution will not be reattempted until the update interval of internal-repository has elapsed or updates are forced

发生了什么事。我们创建了own-maven-plugin的新版本,此插件始终是一个胖子,包含所有必要的依赖项。现在我们所做的只是添加了另一个依赖项。

所以我有两件事我不理解。

  1. 为什么maven会尝试解决build-plugins中使用的已创建jar的所有依赖关系。

  2. 为什么我删除了.m2/org/xy/maven/own-maven-plugin/own-maven-plugin-1.19.0.pom

  3. 后问题得以解决

这是可重复的,添加删除的pom会使构建失败。在Maven插件description site上没有发现任何有关我的问题的迹象。

因此,如果有人有解释。请让我知道。

UPDATE-1: 更新错误消息

2 个答案:

答案 0 :(得分:0)

Maven插件通常不构造为胖子。他们自己解决依赖关系。

如果您有一个胖jar,其pom中包含依赖项,那么这些依赖关系也可能会得到解决,因此您有两次此类:一次在胖jar中,一次在依赖项中。

我不能说这是否能解释您所有的错误,但我想如果您一开始就避开胖子罐,事情就会变得容易些。

答案 1 :(得分:0)

确定问题的原因。

新的依赖项本身包含一个依赖项,其依赖项类型为bundle。

<dependency>
    <groupId>org.xy.maven</groupId>
    <artifactId>own-maven-plugin-dep</artifactId>
    <version>1.2.0</version>
    <type>bundle</bundle>
</dependency>

删除此类型后,它再次像魅惑一样工作。 我不知道为什么首先要添加<type>bundle</type>。但是,删除它不会带来任何不利影响。

阅读this有关捆绑类型的信息并不能帮助您理解为什么在这里消除了我的问题。

此答案未包含问题的所有答案。如果有人提供更好的答案,我很乐意更改接受的答案。