【问题标题】:maven compiles java projects in jdk 1.4 mode while running java 1.7?maven 在运行 java 1.7 时以 jdk 1.4 模式编译 java 项目?
【发布时间】:2012-08-20 16:41:21
【问题描述】:

我有一个大型 Maven 项目,分为几个模块。

我决定用maven给pmd(代码质量检查)模块。

当我尝试使用命令测试 pmd 模块时

mvn pmd:pmd

我收到以下类型的警告:

  • 除非在 JDK 1.5 模式下运行,否则不能使用泛型!
  • 在 JDK 1.4 模式下运行时无法使用注解!
  • 不能在 pre-JDK 1.5 目标中使用 enum 作为关键字

看起来 maven 出于某种原因使用 jdk 1.4 编译项目。

java -version 输出:

java version "1.7.0_05"
OpenJDK Runtime Environment (IcedTea7 2.2.1) (Gentoo build 1.7.0_05-b21)
OpenJDK 64-Bit Server VM (build 23.0-b21, mixed mode)

我用的是gentoo linux。

Linux ufk-work 3.5.2-gentoo #1 SMP Sun Aug 19 18:58:32 IDT 2012 x86_64 Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz GenuineIntel GNU/Linux

mvn -version 输出:

Apache Maven 3.0.4 (r1232337; 2012-01-17 10:44:56+0200)
Maven home: /usr/share/maven-bin-3.0
Java version: 1.7.0_05, vendor: Oracle Corporation
Java home: /usr/lib64/icedtea7/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.5.2-gentoo", arch: "amd64", family: "unix"

所以有什么想法可以确保 maven 可以为 jdk 1.7 而不是 1.4 编译吗?

我在 Google 上搜索并找到了 maven-compiler-plugin 的使用示例,如以下网址所示:http://twit88.com/blog/2008/03/09/maven-compile-your-application-to-be-14-15-or-16-compatible/

不幸的是结果完全一样。

任何有关该问题的信息将不胜感激。

非常感谢!

冷杉

更新

我尝试将 maven-compiler-plugin 和 maven-pmd-plugin 添加到我的主 pom.xml 但结果完全一样。

更新后的 pom.xml 可以在http://bpaste.net/show/41166/查看

【问题讨论】:

    标签: java maven pmd


    【解决方案1】:

    你需要告诉PMD的目标版本:

    <build>
      <pluginManagement>
        <plugins>
          <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <version>2.7.1</version>
          <configuration>
              <targetJdk>1.7</targetJdk>
              <rulesets>
                  <ruleset>tools/pmd-rules.xml</ruleset>
              </rulesets>
          </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.5.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    
        </plugins>
      </pluginManagement>
    </build>
    
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>2.7.1</version>
            </plugin>
        </plugins>
    </reporting>
    

    注意:几个月前 1.7 JDK 还不支持,你应该在文档中仔细检查它,否则你将无法使用菱形语法。

    【讨论】:

    • 我得到了和以前一样的结果。使用指向 pom.xml 文件的链接更新主帖子。
    • 尝试在构建阶段移动pmd配置
    • pmd-rules.xml 不存在可以吗?我还没有创建任何自定义规则。
    • 从 xml 中删除规则集属性后,我收到警告:无法找到要链接到的源外部参照 - 已禁用。我通过执行'mvn jxr:jxr'解决了它。我真的不明白为什么我需要首先执行它。
    • 您应该在目标文件夹中有一个文件 pmd.xml。它包含插件检测到的问题列表。
    【解决方案2】:

    pom.xml:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    【讨论】:

    • 它似乎并没有改变任何东西。更新了带有指向 pom 文件的链接的主帖子。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2019-11-16
    • 2012-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多