Причуды с использованием плагина Maven Eclipse с WTP

Я использую плагин maven eclipse для создания проектов wtp. В основном это работает, но есть некоторые странные причуды, от которых я бы хотел избавиться:

  • Я должен указать -Dwtpversion=2.0 каждый раз, когда я бегу mvn eclipse:eclipse, В противном случае информация о фасете не генерируется.
  • Уровень фасета java установлен на версию 1.4 вместо 6.0, что приводит к ошибке каждого сгенерированного проекта Java compiler level does not match the version of the installed Java project facet

Как мне избавиться от этих причуд?

Ниже мой 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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example.foo</groupId>
  <artifactId>foo</artifactId>
  <packaging>pom</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>foo</name>
  <url>http://maven.apache.org</url>
  <modules>
    <module>module1</module>
    <module>module2</module>
  </modules>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <wtpversion>2.0</wtpversion>
          <additionalProjectFacets>
            <jst.web>3.0</jst.web>
          </additionalProjectFacets>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

3 ответа

Я была такая же проблема. Я исправил это, установив исходную и целевую версии плагина компилятора в ожидаемую версию в <plugin-management> объявление:

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

Обратите внимание, что используя свойства пользователя maven.compiler.target а также maven.compiler.souce вместо конфигурации плагина все еще делает плагин eclipse для генерации java-фасета 1.4.

Вы делаете что-то не так. Вы можете использовать maven-eclipse-plugin (который больше не поддерживается или, по крайней мере, больше не разрабатывается), или использовать m2eclipse. Не оба. Используйте m2eclipse, но убедитесь, что вы также установили дополнительные функции m2eclipse. По некоторым странным причинам это два сайта обновлений, а не только один. Если вы успешно установили дополнения и используете стандартные веб-артефакты или артефакты ejb, конфигурация eclipse будет автоматически обработана дополнениями m2eclipse, если вы используете мастер создания проекта из m2eclipse.

ОБНОВЛЕНИЕ: Извините, плагин Maven Eclipse все еще жив. Взглянул на систему отслеживания ошибок.

Первый

На первый взгляд, я понятия не имею. Исходный код говорит, что это простой параметр mojo (который может быть из тега конфигурации). Единственное, что вы можете рассмотреть, это то, что конфигурация является общей для POM (согласно моему опыту). Таким образом, если вы используете плагин в верхней части POM, а также в нижней части, конфигурация является общей (или одинаковой), что, вероятно, является кратким изложением этих двух (следует проверить в источнике). Таким образом, wtpversion может быть определен где-то еще внутри вашего POM или в родительских POM. Это определение может быть переопределено только записью среды. Цитаты из документации Maven:

Определяет выражения, используемые для вычисления значения, которое будет введено в этот параметр Mojo во время сборки. Выражение, заданное значением по умолчанию, обычно используется для ссылки на конкретные элементы в POM, такие как ${project.resources}, который ссылается на список ресурсов, предназначенных для сопровождения классов в результирующем файле JAR. Конечно, значение по умолчанию не обязательно должно быть выражением, но также может быть простой константой, такой как true или 1.5. А для параметров типа String можно смешивать выражения с литеральными значениями, например, ${project.artifactId}-${project.version}-special. Системное свойство, заданное выражением, позволяет пользователям переопределить значение по умолчанию из командной строки с помощью -DaSystemProperty=value. ПРИМЕЧАНИЕ. Если не указано ни значение по умолчанию, ни выражение, параметр можно настроить только из POM. Использование '${' и '}' необходимо для разделения фактических выражений, которые могут быть оценены.

...

Элементы в родительском POM, которые наследуются его дочерними элементами:

  • зависимости
  • разработчики и участники
  • списки плагинов
  • списки отчетов
  • исполнения плагинов с соответствующими идентификаторами
  • конфигурация плагина

второй

Во-вторых, я думаю, что вы должны заявить о версии jst.java в дополнительных фасетах. Как это: в этом POM:

<additionalProjectFacets>
    <jst.java>5.0</jst.java>
    <jst.ejb>3.0</jst.ejb>
    <jpt.jpa>1.0</jpt.jpa>
</additionalProjectFacets>

Предложение

M2eclipse имеет свои проблемы. С другой стороны, нет необходимости взламывать POM только из-за Eclipse. Поэтому, пока он не будет соответствовать Вашим потребностям, вы должны использовать m2ecipse + extras вместо плагина maven eclipse.

Для версии jst.web подключение Maven Eclipse учитывает зависимости проекта. Если у вас определена зависимость API сервлета:

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>servlet-api</artifactId>
    <version>6.0.32</version>
</dependency> 

У вас jst.web параметр будет 6.0

<faceted-project>
  ...
  <installed facet="jst.web" version="6.0"/>
  ...
</faceted-project>
Другие вопросы по тегам