Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
maven将我的项目编译成哪个主要版本和次要版本的Java?_Java_Maven_Version - Fatal编程技术网

maven将我的项目编译成哪个主要版本和次要版本的Java?

maven将我的项目编译成哪个主要版本和次要版本的Java?,java,maven,version,Java,Maven,Version,我有一个使用maven编译成ear文件的项目。这是用来编译代码的: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <

我有一个使用maven编译成ear文件的项目。这是用来编译代码的:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <source>1.6/source>
        <target>1.6</target>
    </configuration>
</plugin>
看起来我的类是使用主版本50和次版本0编译的

然而,问题仍然存在,编译代码使用了什么特定版本的Java?如果在cmd提示符下键入“java-version”(例如java版本“1.7.0_51”),我希望得到类似的结果

就“java版本”而言,50.0映射到什么

关于这种类型的映射有很多帖子,但它们似乎都只映射了主要版本。这些措施包括:


此外,我似乎没有在编译代码的机器上安装Java 1.6环境,因此我不确定maven使用什么工具将代码编译为Java 1.6

您真的不需要特定版本的JDK。但是,如果确实如此,请使用Maven帮助站点上显示的这段XML:

<configuration>
    <verbose>true</verbose>
    <fork>true</fork>
    <executable><!-- path-to-javac --></executable>
    <compilerVersion>1.3</compilerVersion>
</configuration>

真的
真的
1.3

到JavaC的路径如下:
C:\ProgramFiles\Java\j2sdk1.4.2\u 09\bin\JavaC
。当然,您必须找到实际的Java JDK位置。

当您使用Maven编译Java类时,有几个参与者在起作用,所以您应该了解您感兴趣的版本

  • 马文和
  • 它反过来使用-编译器适配器
  • Java编译器-根据Maven的配置从插件、命令或实现调用
  • 生成的JVM字节码
如果没有使用自定义配置,Maven编译器插件需要Java编译器才能运行,如果您的机器上没有JDK(只有JRE),它将失败。如果使用
-X
(例如
mvn-version-X
)运行
mvn
命令,它将打印有关其使用的Java安装的详细信息。在大多数情况下,将使用该安装中的编译器。请注意,
javahome
指向JRE,但它是JDK的一部分。通过使用
-X
运行构建,您可以找到有关编译器插件的其他有用信息

Apache Maven 3.3.9
Maven home: /usr/share/maven
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-openjdk-amd64/jre
Maven通过在工件的清单(
META-INF/manifest.MF
)中包含构建JDK版本,使我们的生活更加轻松

Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_121
源和目标版本

为了生成1.6字节码,Java编译器不必具有相同的版本。这就是所谓的。因此,您的配置也可以使用JDK1.7和JDK1.8。关于源代码版本(语法),一些源代码版本可以编译为较旧的字节码,而另一些源代码版本可以编译为较旧的字节码。如果您希望在比用于开发的JVM更旧的JVM上运行代码,这一点可能很重要

这就是为什么您可能对用于编译源文件的JDK版本不感兴趣,而对生成的字节码版本感兴趣。正如我在评论中所建议的,在十六进制查看器/编辑器中打开一个
.class
文件并引用以查找版本


更新:顺便说一下,JVM字节码不必由Java编译器创建。除了Java,还有其他JVM语言,但它们的编译器仍然生成可以在JVM上运行的字节码。在这种情况下,谈论Java版本是毫无意义的。

它使用了默认情况下在您的系统上找到的JDK,或者使用了IDE中被重写的JDK。(能够编译和运行1.6)Maven打印正在使用的JAVA_HOME。您可以运行java-version来查看确切的构建。您还可以在十六进制版本中打开一个.class文件,检查Maven是否编译代码,它运行一个插件,调用java编译器(javac)来编译代码。关于您的上一个问题,javac支持交叉编译,这只是事实的一半,因为bootclasspath丢失了。如果你真的需要用一个特定的JDK进行编译,你必须使用…除此之外,如果你运行你的构建,这将用Maven运行的JDK版本运行你的测试…这不是你想要的。。。
Created-By: Apache Maven 3.3.9
Build-Jdk: 1.8.0_121