【问题标题】:Different source and testSource JDKs for a maven project in IntelliJ IDEA [duplicate]IntelliJ IDEA中maven项目的不同源和testSource JDK [重复]
【发布时间】:2015-03-20 13:04:30
【问题描述】:

我在 IDEA 中导入了一个 maven 项目。有一个子模块对常规和测试源使用不同版本的 java - 它对常规源使用 java 1.4,对测试源使用 java 7,如下所示:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.4</source>
        <target>1.4</target>
        <testSource>1.7</testSource>
        <testTarget>1.7</testTarget>
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>

项目在使用maven时编译正常,但在IDEA中编译失败。当我打开项目结构 -> 模块设置时,我看到模块是以 1.4 的语言级别导入的。因此,测试类的编译失败,因为它们使用了 1.4 中不可用的功能。

作为一种解决方法,我手动更改 pom.xml 中的 java 版本。有没有不用修改maven配置的方法?

编辑:按照 cmets 中的建议,我在 IDEA 内的项目结构中手动更改了设置,但在编译项目时出现以下错误:

Information:3/20/2015 5:29 PM - Compilation completed with 1 error and 0 warnings in 5 sec
Error:java: javacTask: source release 1.7 requires target release 1.7

【问题讨论】:

  • 据我所知,每个模块只有一个 Java 版本支持。为什么开发时不想使用 1.7?假设 intellij 使用 1.7,而 Maven 仍然使用 1.4 编译它。我认为它会起作用。另一种选择是将您的测试项目放到另一个模块中。
  • @bhdrkn 我尝试更改 IDEA 中的设置,但我在问题中添加了一个看起来很奇怪的错误。

标签: java maven intellij-idea


【解决方案1】:

很遗憾,Idea 尚不支持源代码和测试的不同语言级别。早在 2012 年就在 JetBrains 问题跟踪器中打开了相应的错误:https://youtrack.jetbrains.com/issue/IDEA-85478

作为一种解决方法,我每次将我的 maven 项目导入到 Idea 时(即在对 pom.xml 进行任何更改后)时都会执行以下操作:

  1. 转到Project Structure (Ctrl+Alt+Shift+S),打开您的模块并将语言级别设置为1.7
  2. 打开Idea settings (Ctrl+Alt+S),搜索Java compiler 并将项目的目标字节码版本更改为1.7

不利的一面是,Idea 不知道您的非测试源代码应该针对 1.4 进行编译,并且会为您提供仅在 Java 1.5+ 中可用的更改

另一种解决方案是将测试提取到单独的 Maven 模块中(它将作为单独的 Idea 模块导入到 Idea)并为其设置不同的语言级别,即仅将 testSource 级别指定为 1.7 用于包含您的测试的模块

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多