maven 如何在pom.xml文件中指定Java编译器版本?

6tqwzwtp  于 11个月前  发布在  Maven
关注(0)|答案(5)|浏览(147)

我在Netbeans中写了一些Maven代码,大约有2000多行。当我在Netbeans上编译它时,一切都很好,但如果我想在命令行上运行它,我会得到这些错误:

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        HashSet<Double> resid_List = new HashSet<Double>(Arrays.asList(resid_val));

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
        List<Integer> ind_ovlpList = new ArrayList<Integer>(Arrays.asList(ind_ovlp));

generics are not supported in -source 1.3
(use -source 5 or higher to enable generics)
public class ColumnComparator implements Comparator<double[]> {

annotations are not supported in -source 1.3
(use -source 5 or higher to enable annotations)
@Override

字符串
我尝试使用Java 1.3.1, compiler errors,但我得到了更多的错误。我发现从其他职位,我应该修改pom.xml,但我不知道如何。这是我的pom.xml

<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.mycompany</groupId>
  <artifactId>mavenmain</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging>

   <name>mavenmain</name>
    <url>http://maven.apache.org</url>

   <properties>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

   <dependencies>
     <dependency>
       <groupId>junit</groupId>
        <artifactId>junit</artifactId>
       <version>3.8.1</version>
       <scope>test</scope>
     </dependency>
     <dependency>
        <groupId>gov.nist.math</groupId>
        <artifactId>jama</artifactId>
        <version>1.0.2</version>
     </dependency>
   </dependencies>
 </project>


如果你能帮我就太好了!

smdnsysy

smdnsysy1#

maven-compiler-plugin它已经存在于pom.xml中的插件层次结构依赖项中。请检查Effective POM。

简单来说,你可以像这样使用属性:

<properties>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
</properties>

字符串
我用的是Maven 3.2.5。

rggaifut

rggaifut2#

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>(whatever version is current)</version>
        <configuration>
          <!-- or whatever version you use -->
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>

字符串
查看maven编译器插件的配置页面:
http://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html
不要使用Java 1.3.x,当前版本是Java 11或17。

ogq8wdun

ogq8wdun3#

通常情况下,您不希望只为source版本赋值(例如,javac -source 1.8),而是希望同时为sourcetarget版本赋值(例如,javac -source 1.8 -target 1.8)。
请注意,从Java 9开始,您可以通过一种更健壮的方式来传递信息和实现交叉编译兼容性(javac -release 9)。
Package javac命令的Maven提供了多种方式来传达所有这些JVM标准选项。

如何指定JDK版本?

使用maven-compiler-pluginmaven.compiler.source/maven.compiler.target属性来指定sourcetarget是否相等。

<plugins>
    <plugin>    
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
</plugins>

字符串

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>


根据Maven documentation of the compiler plugin是等效的,因为编译器配置中的<source><target>元素使用maven.compiler.sourcemaven.compiler.target属性(如果已定义)。

来源

Java编译器的-source参数。
默认值为:1.6
用户属性为:maven.compiler.source

目标

Java编译器的-target参数。
默认值为:1.6
用户属性为:maven.compiler.target
关于默认值为sourcetarget,请注意since the 3.8.0 of the maven compiler, the default values have changed from 1.5 to 1.6

<release>标记-在maven-compiler-plugin 3.6中指定Java版本的新方法

可以使用release参数:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>9</release>
    </configuration>
</plugin>


您也可以只宣告使用者属性maven.compiler.release

<properties>
    <maven.compiler.release>9</maven.compiler.release>
</properties>


但目前最后一个版本还不够,因为您使用的maven-compiler-plugin默认版本不依赖于足够新的版本。
Maven release参数将release传递给Java编译器,以访问Java 9中新添加的JVM标准选项JEP 247: Compile for Older Platform Versions
针对特定虚拟机版本的公共、受支持和文档化API进行编译。
这种方式提供了一种标准方法,可为sourcetargetbootstrap JVM选项指定相同的版本。
请注意,指定bootstrap是交叉编译的一个很好的做法,如果不进行交叉编译也不会有什么坏处。

指定JDK版本的最佳方式是什么?

Java 8及更低版本

无论是maven.compiler.source/maven.compiler.target属性还是使用maven-compiler-plugin都不是更好的。这不会改变事实,因为最终这两种方法依赖于相同的属性和相同的机制:maven核心编译器插件。
如果您不需要在编译器插件中指定Java版本以外的其他属性或行为,则使用这种方式更有意义,因为它更简洁:

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

Java 9及更高版本

release参数(第三点)是一种强烈考虑是否要对sourcetarget使用相同版本的方法。

xzv2uavs

xzv2uavs4#

我在eclipse neon simple maven java项目中遇到了同样的问题。
但我在pom.xml文件中添加了以下详细信息

<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.6.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

字符串
右键单击project > maven > update project后(选中强制更新)
它解决了我在项目上显示错误
希望对你有帮助
坦斯克

mhd8tkvw

mhd8tkvw5#

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <fork>true</fork>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

字符串

相关问题