首页 > 解决方案 > 使用不同的语言级别进行测试和生产

问题描述

我们有一个项目构建了一个与 Java 6 兼容的库(一个 jar 文件),但是我们的单元测试是使用 Java 8 运行的,并且它们使用 Java 8 语法。我们的 Maven pom.xml 文件包括:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.6</source>
            <target>1.6</target>
            <testSource>1.8</testSource>
            <testTarget>1.8</testTarget>
        </configuration>
    </plugin>

IntelliJ IDEA 项目构建为 Maven 项目。不幸的是,IntelliJ IDEA 将整个项目视为使用 jdk 1.6,甚至是单元测试,所以编辑器窗口在 Java 8 语法(例如 lambda 表达式)下放了一条红线,表示 Java 6 不支持。有没有办法告诉它对测试使用 Java 8 语法,对生产代码使用 Java 6?它们存在于不同的目录树中,但属于同一模块。

标签: javaintellij-idea

解决方案


根据 IntelliJ IDEA 文档,可以为不同的模块配置不同的 JDL,但它们不支持不同的 JDK 用于测试和源代码。

甚至还有官方回应:

目前不支持: https ://youtrack.jetbrains.com/issue/IDEA-85478 。

(更多详情:https ://intellij-support.jetbrains.com/hc/en-us/community/posts/360001335500-Set-different-java-language-level-between-source-code-and-test-in -idea的最新稳定版本- )

有一个有点笨拙的解决方法 - 您可以使用仅用于 IDEA 的不同 Maven 配置文件:

<profiles>
  <profile>
    <id>ide</id>
    <activation>
      <activeByDefault>false</activeByDefault>
      <property>
        <name>idea.maven.embedder.version</name>
      </property>
    </activation>
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.2</version>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <testSource>1.8</testSource>
            <testTarget>1.8</testTarget>
          </configuration>
        </plugin>
      </plugins>
    </build>
  </profile>
<profiles>

可以在此处找到更多详细信息:https ://youtrack.jetbrains.com/issue/IDEA-85478


推荐阅读