it-swarm.com.ru

Как указать версию компилятора Java в файле pom.xml?

Я написал Maven-код для NetBeans, который имеет примерно более 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, ошибки компилятора , но я получил больше ошибок. Я нашел из других сообщений, что я должен изменить 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>

Было бы здорово, если бы вы могли мне помочь.

239
MTT
<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 1.7.x или 1.8.x

297
Sean Patrick Floyd

maven-compiler-plugin он уже присутствует в зависимости иерархии плагинов в pom.xml. Проверьте в эффективном POM.

Для краткости вы можете использовать такие свойства:

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

Я использую Maven 3.2.5

343
leocborges

Я столкнулся с той же проблемой в проекте 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>

После щелчка правой кнопкой мыши на проекте> Maven> обновить проект (проверено принудительное обновление)

Я решил показать ошибку на проекте

Надеюсь, это будет полезно

Thansk

10
Vijay Gajera

Как правило, вы не хотите указывать только версию source (например, javac -source 1.8), но вы хотите указывать как версию source, так и версию target (например, javac -source 1.8 -target 1.8).
Обратите внимание, что из Java 9 у вас есть способ передать как информацию, так и более надежный способ совместимости с кросс-компиляцией (javac -release 9).
Maven, заключающий в себе команду javac, предоставляет несколько способов передачи всех этих стандартных параметров JVM.

Как указать версию JDK?

Использование свойств maven-compiler-plugin или maven.compiler.source/maven.compiler.target для указания source и target эквивалентны.

<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 плагина компилятора , поскольку элементы <source> и <target> в конфигурации компилятора используют свойства maven.compiler.source и maven.compiler.target, если они определены.

источник

Аргумент -source для компилятора Java.
Значение по умолчанию: 1.6.
Свойство пользователя: maven.compiler.source.

цель

Аргумент -target для компилятора Java.
Значение по умолчанию: 1.6.
Свойство пользователя: maven.compiler.target.

Что касается значений по умолчанию для source и target, обратите внимание, что начиная с 3.8.0 компилятора maven значения по умолчанию изменились с 1.5 на 1.6 .

Из 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: a новый стандартный параметр JVM , который мы можем передать из Java 9:

Компилируется с общедоступным, поддерживаемым и документированным API для конкретной версии VM.

Этот способ предоставляет стандартный способ указания одной и той же версии для параметров JVM source, target и bootstrap.
Обратите внимание, что указание 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 (третий пункт) - это способ убедительно рассмотреть, хотите ли вы использовать одну и ту же версию для source и target.

10
davidxxx
<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> 
0
Sasidhar Reddy