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

具有源1.6配置的Maven编译器插件是否可以识别从1.7开始引入的API?

楚骞尧
2023-03-14
问题内容

我有一个配置如下的maven-compiler-plugin的maven项目:

    <plugin>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.0</version>
      <configuration>
        <source>1.6</source>
        <target>1.6</target>
      </configuration>
    </plugin>

在我的代码中,我使用了从1.7开始引入的类java.nio.charset.StandardCharsets。我为自己的代码编译成功感到惊讶,插件不应该抛出错误,因为java.nio.charset.StandardCharsets不兼容1.6吗?


问题答案:

既不与编译器的类路径上可用的类相关,target也不source以任何方式相关。如果您使用1.7编译器编译代码,则1.7附带的任何类都可用于您的代码。

是什么target做的是告诉编译器输出的.class文件的格式与1.6版本的Java兼容。
source表示仅接受将使用1.6版编译器进行编译的Java代码。

因此,使用写入与Java 1.6兼容的类文件中的Java 1.6兼容源代码来调用仅在1.7或更高版本中提供的类是完全合法的。它不会在1.6上运行。

确保您的代码将在1.6上运行的唯一方法(如果您要这样做)是使用1.6 JDK编译项目。



 类似资料:
  • 问题内容: 我正在尝试从Maven内部执行繁琐的任务,而无需安装Node.js或任何东西。这是因为我不想将我的工件由Jenkins打包,也无法在该机器上安装Node.js。 我知道使用npm很容易,并且有一些命令可以使它正常工作,但是我也认为与maven集成应该很容易,问题是我不知道从哪里开始,因为我是npm的新手。 问题答案: 是的,使用frontend-maven-plugin,您可以通过Ma

  • 问题内容: 我有一个项目,负责修复一些错误,另一个开发人员负责其他错误。错误的数量远远超过一百,在我修复错误时,她的错误不断堆积。我现在看到她的错误中有99个是我的错误,我想我很快就会发现她的错误中有100个。我研究了如何将此配置用于Maven: 但是没有骰子: 在使用javac的命令行上,maxerrs标志可以按预期工作,但我似乎无法迅速使用它。 有任何想法吗? 问题答案: 使用“地图语法”对我

  • 我正在尝试使用一个第三方API,在那里我可以获得对JDK 1.6之前的第三方API的支持。 我还有其他几个项目是使用JDK1.7构建的,作为产品的一部分,我还在打包JRE 1.7。 如果编译器符合性级别设置为JDK 1.6,则编译 当编译器符合性级别设置为JDK 1.6时,向第三方供应商申请支持是否安全。 更新:我假设在eclipse中设置编译器级别与设置源代码相同 我不确定是否使用JDK 1.7

  • 我对Googlescript很陌生,所以请原谅我的简单问题:我想使用将数据从一个googlesheet导入到另一个googlesheet。源googlesheet的源范围可以填充1到6行(变量),但目标googlesheet的目标范围只能包含非空行。 但这会继续添加我要求的6行(源代码表中的A4到U9)。。。 有人能帮我弄清楚如何只导入非空行吗?

  • 我正在尝试用我的项目设置mapstruct,我已经习惯了通过简单的jvm代理来完成的lombok,所以我真的不明白如何让mapstruct工作。 这是我的pom: 请注意,在mapstruct进入游戏之前,我不需要整个maven编译插件块:一切都很好。我可以毫无问题地构建springboot胖jar,无需明确指定spring和lombok注释处理。。。那是非常美好的时光。 现在我甚至不确定我是否在

  • 问题内容: 我正在尝试比较以下结果:(在蚂蚁中) ……对此:(在行家中) …只是发现生成的两个类文件的校验和略有不同,而其余的相同。我认为多线程起了一定的作用,但是在反复尝试后,为这两个选项生成的校验和似乎是一致的。什么可能解释这个结果? 更新: 我使用来检查了一组具有不同校验和的文件,并注意到唯一的区别是: 相对于: 问题答案: 如您所展示的,差异在于生成的常量池,这实际上不是问题,但是令人不安