Maven: ошибка: дженерики не поддерживаются в исходном коде 1.3, я использую 1.6

#maven

#maven

Вопрос:

Я импортировал существующий проект Maven в Eclipse IDE . Я изменил в нем некоторый код, он успешно скомпилирован, я использую Java 1.6 в качестве компилятора, и когда я пытаюсь запустить maven clean install -X

Выдает следующую ошибку

не удалось проанализировать сообщение об ошибке: (используйте -source 5 или выше, чтобы включить дженерики) D:bayerutilsrcmainjavacomtatabayerutilBrokerageCalendar.java:179 : ошибка: дженерики не поддерживаются в исходном коде 1.3

    private static Hashtable<String, Boolean> nyseHolidays = new Hashtable<String, Boolean>();
                           ^

could not parse error message:   (use -source 5 or higher to enable generics)
D:bayerutilsrcmainjavacomtatabayerutilAPIHttpXmlClient.java:27: error: generics are not supported in -source 1.3
                        Class<? extends APIResponse> responseClass) {
                         ^
  

Пожалуйста, предложите какие-либо идеи о том, как это решить??

Комментарии:

1. Какую версию Maven вы используете и правильно ли вы настроили JAVA_HOME

Ответ №1:

Вы заявляли, что хотите использовать java 1.6 в своем проекте pom.xml ?:

 <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <compilerArgument></compilerArgument>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
  

Комментарии:

1. @AndreiBodnarescu для вас. Конечное имя не имеет значения для этой проблемы.

2. мы сделали так: <profile> <id>1.6</id> <build> <плагины> <плагин> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId><конфигурация> <jdkLevel>1.6</jdkLevel> <source>1.6</source> <target>1.6</ target> <compilerArgument>1.6</compilerArgument> </ configuration</ plugin> </ plugins> </build> Мы используем Java 1.7 и maven как Apache Maven 2.2.1 (r801777; 2009-08-07 00:46:01 0530) Java home: c:SoftwaresJavajdk1.7.0jre

Ответ №2:

Настройка плагина компилятора Maven решит проблему. Оказывается, проблема была вызвана пакетом Maven3 в репозитории Ubuntu. Альтернативным решением является загрузка Maven 3 с веб-сайта Apache, который использует более современный плагин компилятора.

Я хотел знать, почему это происходит, когда в документации указано, что исходный код Java по умолчанию равен 1.5. Чтобы узнать, что mvn использует для вашего плагина компилятора, используйте:

 mvn help:effective-pom
  

Мой плагин компилятора Maven был 2.0.2, хотя я использовал Maven 3.0.4 из пакетов Ubuntu.
Когда я запускаю ту же команду, используя Maven 3.0.4 из Apache, у меня есть плагин версии 2.3.2, который по умолчанию использует Java 1.5, как и ожидалось.

Комментарии:

1. Это тоже было проблемой для меня при использовании пакета Maven, поставляемого из Ubuntu. Установка из Apache, как было предложено, и проблема была решена.

Ответ №3:

Вы должны настроить плагин компилятора Maven.

 <plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>
  

Комментарии:

1. стоит отметить, что значение по умолчанию равно 1.5 для плагина компилятора> = 2.3. В Maven 2.2.1 по умолчанию используется плагин компилятора 2.0.2, но вы можете переопределить его, как описано.

2. (кстати, в версии примера есть опечатка, но вы не можете вносить изменения из 1 символа в stackoverflow 🙂

Ответ №4:

Другой способ, который не требует изменения pom, — указать источник и цель в командной строке:

 mvn clean install -Dmaven.compiler.source=1.6 -Dmaven.compiler.target=1.6
  

Обратите внимание, что этого следует избегать, поскольку сборка не может быть гарантированно повторяемой таким образом.

Ответ №5:

Я бы предпочел это:

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