java - 使用不同的语言级别进行测试和生产
问题描述
我们有一个项目构建了一个与 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?它们存在于不同的目录树中,但属于同一模块。
解决方案
根据 IntelliJ IDEA 文档,可以为不同的模块配置不同的 JDL,但它们不支持不同的 JDK 用于测试和源代码。
甚至还有官方回应:
目前不支持: https ://youtrack.jetbrains.com/issue/IDEA-85478 。
有一个有点笨拙的解决方法 - 您可以使用仅用于 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
推荐阅读
- javascript - 带有 Node.js 的 Docker 运行 -v 卷不起作用
- pytorch - 如何解决pytorch中的目标越界错误?
- powershell - Powershell 脚本未在 CSV 文件中显示 IP 地址
- flutter - Flutter:如何将项目的 ID 添加到字符串列表中
- daxstudio - Daxstudio 中的 Vertipaq Analyzer Metrix 窗格
- java - Java 下划线 - 在 Java 中将 JSON 转换为 XML
- android - 数据类动态改变可序列化名称
- javascript - 将重复数据发送到数组,然后检查所述数组是否为空,以决定接下来运行什么代码,如果语句不能正常工作
- python - Python Flask:拒绝服务器关闭时出错
- graphql - nestjs ResolveField 无法确定 GraphQL 主机类型