【问题标题】:Maven uses old plugins on stock Ubuntu installationMaven 在 Ubuntu 安装中使用旧插件
【发布时间】:2013-12-20 23:56:48
【问题描述】:

由于某种原因,我的 Ubuntu 13.10 Maven 安装使用旧插件。最明显的编译器插件是 2.0.2 版本,默认为 Java 1.3:

$ mvn --show-version compile                                  
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.11.0-14-generic", arch: "amd64", family: "unix"
[INFO] Scanning for projects...
[...]
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project simple: Compilation failure
[ERROR] [...]/simple/src/main/java/org/sonatype/mavenbook/App.java:[11,17] error: generics are not supported in -source 1.3

由于ArrayList<Integer> a = new ArrayList<Integer>(); 使用泛型,编译失败。 现在我知道我可以强制 maven 使用当前的编译器插件(请参阅 generics are not supported in -source 1.3但我宁愿解决根本原因,也不愿将我使用的每个插件都添加到我的 pom 文件。 如果没有其他解决方案,我会将插件规范添加到父 pom,但我仍然会对理性 maven 选择插件版本感兴趣。

我的环境:我的本地 m2 存储库中没有 settings.xml,我的(库存 Ubuntu)/etc/maven/m2.conf 看起来像这样:

main is org.apache.maven.cli.MavenCli from plexus.core

set maven.home default ${user.home}/m2

[plexus.core]
optionally ${maven.home}/lib/ext/*.jar
load       ${maven.home}/lib/*.jar

我的/etc/maven/settings.xml 基本上是空的,除了一些 cmets 和空的 xml 标签。项目pom是mvn archetype:generate -DgroupId=org.sonatype.mavenbook -DartifactId=simple -Dpackage=org.sonatype.mavenbook -Dversion=1.0-SNAPSHOT默认生成的:

<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">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>simple</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>simple</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

有什么建议吗?

【问题讨论】:

  • 你定义了父 pom 吗?也许它仍然指定编译器插件版本?
  • @NickDK:不,没有:(

标签: java maven ubuntu


【解决方案1】:

您可以(并且应该)在 pom.xml 中手动指定 Maven 编译器插件

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
</build>

我不知道为什么 Maven 3.0.4 使用如此早期的 Maven 编译器插件版本,但我不认为这是特定于 Ubuntu 的问题。我不知道通用解决方案是否需要本地配置。您想避免这种情况,因为它使您的构建平台依赖。在你的 pom 中明确指定它的好处是你可以在任何其他机器上构建你的项目,而不会再次遇到同样的问题。

如果不想在每个项目中都这样做,您可以使用父 pom。见default maven compiler setting

【讨论】:

  • 谢谢,但如果可能的话,我想避免对我使用的每个插件都这样做,而是解决根本原因。
  • 设置父pom。它们非常适合各种事情。
  • 添加了一些关于通用解决方案和父 pom 的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-16
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多