当前位置: 首页 > 面试题库 >

使用Maven设置Java编译器的-source和-target-不起作用

颜修明
2023-03-14
问题内容

我已经设置了pom文件,要求Maven使用sourceand targetconfig参数将我的源代码编译为1.5版兼容。这是我的pom:

<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>com</groupId>
  <artifactId>user</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>test</name>
   <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

我有一个简单的主类,像这样:

package com.user;
public class Test
{
    public static void main(String[] argv)
    {
        System.out.println("".isEmpty());
    }
}

String#isEmpty()自Java 1.6开始引入。但是,用mvn compile工程来编译我的代码,虽然我希望它会失败,因为我已经将Maven设置为将我的代码编译为Java
1.5并String#isEmpty在Java 1.6中引入。有人可以建议我做错了什么吗?强制Maven在编译时使用特定Java版本的正确方法是什么?

有关信息,我正在使用Apache Maven 2.2.1和javac 1.6.0_19。

谢谢。


问题答案:

从编译器插件页面底部的注释中:

仅设置目标选项并不能保证您的代码实际在具有指定版本的JRE上运行。陷阱是仅在更高版本的JRE中存在的API的意外使用,这会使您的代码在运行时由于链接错误而失败。为避免此问题,您可以将编译器的引导类路径配置为与目标JRE匹配,或使用Animal
Sniffer Maven插件来验证您的代码未使用意外的API

这意味着,尽管您正在生成1.5级字节码,但仍可以(无意间)调用1.6 API方法。要标记这些invalide API调用,请使用它们提到的插件。



 类似资料:
  • 问题内容: 现在,我正在用自己的语言编写一个小的Java应用程序,其中只有几个maven pom.xml文件。我想使我所有的maven软件包都可以使用jdk 1.6进行编译,而如果没有在每个POM上手动设置它的话,我将找不到一个很好的方法-我讨厌复制粘贴 在我生成的每个pom.xml文件中。 有没有更简单的方法来解决此问题? 问题答案: 创建一个具有所需的编译器设置(以及任何其他默认设置)的仅po

  • 问题内容: 为Java 6注释处理器设置Eclipse项目编译器配置的最佳方法是什么? 我的解决方案是手动设置和文件。这有点麻烦: 在factorypath文件中引用处理器jar 配置蚀注解处理器输出目录在属性) 将Eclipse注释处理器输出目录添加为源文件夹 一个问题是,Eclipse生成的源将使用maven进行编译。Only 是可靠的,因为它删除了Eclipse生成的源文件。(Eclipse

  • 在我的 maven 项目中,我目前正在将我的 Java 代码与一些 Groovy 代码混合在一起。在这一点上,我主要使用Groovy来构建豆子。我的一些Java代码直接使用Groovy豆。 我这样配置Maven编译器插件:- 当我使用运行我的测试用例时,它工作得很好。 然而,当我通过右键单击测试文件直接从IntelliJ运行测试用例并运行它时,Groovy bean上会出现“找不到符号”错误。当我

  • 我已经尝试了一些 bable 设置,tsconfig 中的不同目标/库设置,什么都没有。不知道我还能做什么... 错误如下所示:

  • 我正在一个web项目中创建一个自定义。java文件,使用自定义类加载器加载它,使用编译器API编译它,然后通过反射执行它。唯一似乎不起作用的是编译如下所示的文件: 使用编译器API的诊断收集器,我得到以下错误消息: 包“exceptions”和引用的类肯定存在,我的src文件夹的结构如下:(也包含类文件的文件夹) src公司 例外情况 测试文件 我尝试按照这里的建议设置类路径,但它不会改变任何东西

  • 这是我第一次使用Spring-Data-jpa和Querydsl。 我正在尝试配置数据模型的自动生成。 我执行了以下步骤: 我在pom中添加了以下依赖项。xml 然后我添加了以下插件 但我总是在pom中遇到同样的错误。xml: 生命周期配置未涵盖插件执行:com。迈塞马。maven:maven apt插件:1.0.2:流程(执行:默认,阶段:生成源代码) 并且未生成和填充target/genera