有关build.plugins.plugin.version的Maven 3警告


313

自从我更新到Maven 3以来,在每个版本中我都收到以下警告消息:

我如何摆脱这些警告?

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for proj:id:jar:3.1
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. @ line 195, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 204, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 227, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 215, column 15
[WARNING] 'reporting.plugins.plugin.version' for org.codehaus.mojo:jdepend-maven-plugin is missing. @ line 271, column 15
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.

1
在Maven 3.5.3中,这现在是一个错误。不要忽视警告!感谢@gavenkoa提供有关如何找到插件版本的答案。
jwm

Answers:


400

在文件中的<version>后面添加元素。查找以下文本:<plugin> <artifactId>pom.xml

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>

将版本标签添加到其中:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>

警告应解决。

关于此:

org.apache.maven.plugins的'build.plugins.plugin.version':缺少maven-compiler-plugin

许多人提到了为什么发生此问题,但没有提出解决方案。我要做的就是进入我的项目的POM文件,并添加<version>标签,如上所示。

要发现版本号,一种方法是在Maven完成运行后查看其输出。如果缺少版本号,Maven将显示其默认版本:

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ entities ---

如图所示,获取该版本号(2.3.2如上)并将其添加到您的POM中。


4
@JBT不明白为什么?Maven构建本来是稳定的,所以应该明确定义一个版本。这就是为什么Maven要求它。就像消息说的那样,“强烈建议修复这些问题,因为它们会威胁到您的构建的稳定性。”
2013年

3
不过这有点奇怪,因为只有在将插件的条目添加到项目POM文件中时,您才会遇到此问题。有效的POM具有version元素,但是您仍然需要向项目POM中添加一个version元素以消除此警告。
oenpelli

2
我收到与原始问题相同的警告,但是我的pom.xml没有对maven-compiler-plugin的引用。我想念什么?谢谢!
维克托•E. Silva的Souza的

3
没有为我工作。插件版本标记已经在那里。
Erran Morad 2014年

4
是2.3.2最新版本吗?你怎么知道是哪一个?还是没关系?
Pocketkid2,2015年

84

运行像:

  $ mvn help:描述-DartifactId = maven-war-plugin -DgroupId = org.apache.maven.plugins

对于没有版本的插件。您得到输出:

名称:Maven WAR插件
说明:从项目中构建一个Web应用程序存档(WAR)文件
  输出及其依赖项。
组ID:org.apache.maven.plugins
工件ID:maven-war-plugin
版本:2.2
目标前缀:战争

使用输出中显示的版本。

更新如果要在版本列表中进行选择,请使用http://search.maven.org/http://mvnrepository.com/。请注意,您最喜欢的Java IDE必须具有Maven软件包搜索对话框。只需检查文档即可。

我也使用SUPER UPDATE

$ mvn dependency:tree
$ mvn dependency:list
$ mvn dependency:resolve
$ mvn dependency:resolve-plugins  # <-- THIS

最近,我发现了如何获取插件(或库)的最新版本,因此不再需要谷歌搜索或访问Maven Central

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS

6
+1。另一种更紧凑的变体:mvn help:describe -Dplugin=groupId:artifactId
informatik01

3
确实,这并没有给出解决方案,但无论如何它都是有价值的内容:确实如何才能找到使用/预期的版本。也许值得一提的是使用pluginManagement-tag将这些插件版本放在父pom中:stackoverflow.com/a/10483284/1023341
gkephorus

14

Maven 3对POM结构的限制更大。例如,您必须设置插件的版本。

使用Maven 3.1时,这些警告可能会破坏您的构建。maven2和maven3之间还有更多更改:https ://cwiki.apache.org/confluence/display/MAVEN/Maven+3.x+Compatibility+Notes


11

从以下位置获取最新版本信息:

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin

单击最新版本(或您要使用的版本),您将看到依赖项信息(截至2019-05时为3.8.1):

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<dependency>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
</dependency>

您可能要对插件标签使用version标签和注释。

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source />
        <target />
    </configuration>
</plugin>

如果愿意,您可以修改pom以在属性标签中包含版本信息,如另一个答案中所述。


10

我正在为项目使用父pom,并且想要在一个地方指定版本,所以我使用属性来指定版本:

父pom:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ....
    <properties>
        <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
    </properties>
    ....
</project>

pom项目:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ....
    <build>
        <finalName>helloworld</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin-version}</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

另请参阅:https : //www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/


1
我认为对插件的版本使用pluginManagement可能更好或更自然。
乔纳森·罗森

除非您在子POM中具有覆盖的pluginManagement。
乔纳森·罗森

2

这是一个很好的答案。我想添加“为什么在Maven3中添加元素”。
Maven 3.x兼容性说明

插件Metaversion解析在
内部,Maven 2.x使用特殊版本标记RELEASE和LATEST来支持自动插件版本解析。这些metaversions在声明元素中也得到认可。为了可复制的构建,Maven 3.x不再支持在POM中使用这些元转换。结果,用户将需要用具体的版本替换这些元版本的出现。

我也在maven-compiler-plugin中找到了-用法

注意:如果您未指定插件版本,则Maven 3.0将发出警告。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.