M2E и наличие сгенерированных maven исходных папок в качестве исходных папок eclipse


91

У меня есть проект maven в eclipse и цели maven, которые запускают процессоры аннотаций для генерации кода. Папка вывода для этого кода - target / generated-sources / apt.

Чтобы eclipse смог увидеть этот сгенерированный код, мне нужно добавить target / generated-sources / apt в качестве исходной папки в проект eclipse.

Однако это вызывает ошибку типа «Проблема конфигурации Maven», говорящая

Конфигурация проекта устарела с pom.xml. Запустить обновление конфигурации проекта

Думаю, я понимаю, почему это так, поскольку eclipse имеет другой набор исходных папок, чем набор maven. Но мне нужен этот другой набор, так как мне нужно eclipse, чтобы иметь возможность видеть сгенерированные исходные папки ...

При построении чистого maven эти исходные папки будут включены в сборку maven.

Кстати, я обновился до официального выпуска eclipse плагина maven eclipse, m2e 1.0 - того, что раньше было m2eclipse. Я хотел бы посмотреть, смогу ли я найти обходное решение / решение этой проблемы с помощью плагина m2e, прежде чем мне придется вернуться к старой версии m2eclipse.

Ответы:


105

Вам необходимо прикрепить исходный каталог с помощью build-helper-plugin .

Вот так:

 <plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/java/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
 </plugin>

Вам также потребуется:

  • Установите «Apt M2E Connector» из Eclipse Marketplace. Для этого щелкните ошибку на вкладке «Обзор» вашего pom.xml и выберите «Обнаружить».
  • Убедитесь, что для build-helper-maven-plugin отсутствуют фильтры выполнения плагина (см. Https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html )

4
это решение отлично работает, когда m2e connector for build-helper-maven-pluginоно установлено в Eclipse
Брэд Купит

У меня не работает. Не могли бы вы подробнее рассказать о настройке плагина build-helper-plugin?
Кевин Вонг,

<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> generate- источники </phase> <goals> <goal> add-source </goal> </goals> <configuration> <sources> <source> $ {project.build.directory} / generated-sources / java / </source> <source> $ {project.build.directory} / jaxws / wsimport / java </source> </sources> </configuration> </execution> </executions> </plugin>
Кевин Вонг

2
С Kepler мне также пришлось установить коннектор m2e для плагина maven помощника сборки. (Просто откройте свой pom в редакторе maven pom eclipse и нажмите красную ссылку вверху).
Snicolas

1
Насколько я могу судить, по состоянию build-helper-maven-pluginс <version>определяется как 3.2.0(последняя , как в письменной форме), нет необходимости использовать Apt m2e Connector. В настоящее время мы работаем над Eclipse IDE 2020-06, используя встроенный Maven 3.6.3 в Eclipse, и наши проблемы с исходной папкой, имеющей исключения (**), исчезли после попытки добавить пути к каталогам исходных папок. Теперь все включения имеют (** / *. java) в них.
tom_mai78101

80

Щелкните правой кнопкой мыши сообщение об ошибке:

Конфигурация проекта устарела с помощью pom.xml Выполнить обновление конфигурации проекта

в представлении «Проблемы», выберите « Быстрое исправление» и нажмите « Готово», чтобы выбрать конфигурацию проекта обновления по умолчанию . Это исправляет.


1
У меня это тоже работает. Почему это не принятый ответ? Похоже, принятый ответ слишком много делает.
Niels Basjes

14
@NielsBasjes, это не принятый ответ, потому что он просто бесполезен. Когда вы добавляете что-то в путь сборки в Eclipse, это означает, что вы больше не синхронизированы с POM, отсюда и предупреждение. При обновлении конфигурации проекта просто удаляется дополнительная запись пути сборки, что изначально было проблемой.
Фил

4

После перехода на новые версии m2e / maven / apt ... у меня были ошибки сборки из-за дублирования файлов, вызванных добавлением пути сборки с помощью buildhelper, поэтому мне нужно было удалить "apt-сгенерированные" -Folders из buildhelper.

Чтобы устранить проблему в Eclipse, не добавляя папку «apt-generated» через «Обновить конфигурацию Maven» в M2E, я написал подключаемый модуль M2E для решения этой проблемы. Он добавляет outputDirectories, настроенные в maven-apt-plugin, в путь сборки проекта.

https://apt-m2e.googlecode.com


1
к сожалению, @Stefan Wo ваша страница плагина / репозиторий теперь 404 на googlecode.com; не могли бы вы обновить его, а также запись Eclipse Marketplace? см. marketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

В m2e 1.0 изменилась обработка плагинов Maven. Возможно, вам не хватает определенного расширения m2e для вашего плагина генерации кода. Вот вся документация, которую мне удалось найти.

Этот отчет об ошибке также может иметь отношение.


Думаю, m2e новый и имеет много выдающихся разработок
Майкл Уайлс

2
Я считаю, что проблема в том, что простое применение плагинов Maven к проектам m2eclipse, как это делал m2eclipse, в большинстве случаев работало, но не всегда гарантировалось, что оно всегда будет делать правильные вещи. Новый подход потенциально более надежен, но требует, чтобы многие плагины Maven имели аналог m2e.
Никола Мусатти

2

https://bugs.eclipse.org/bugs/show_bug.cgi?id=350081

запрос на CXF JIRA (см. 1 ) для добавления сопоставлений жизненного цикла в самом cxf-codegen-plugin. Для этого потребуется m2e 1.1, но я считаю, что это лучший подход, чем создание коннекторов вне проекта cxf, предполагая, что API отображения жизненного цикла будет меняться реже, чем cxf-codegen-plugin и cxf.


0

Вы также можете использовать коннектор buildhelper m2e, доступный в каталоге Discovery. Я использую Eclipse 3.7


0

Eclipse Java EE IDE для веб-разработчиков. Версия: Juno Service Release 1

mvn archetype:generate \
   -DarchetypeGroupId=org.codehaus.mojo \
   -DarchetypeArtifactId=gwt-maven-plugin \
   -DarchetypeVersion=2.5.0

mvn clean install

работают отлично.

Но в eclipse у меня такая же ошибка в классе Asinc.

Просто нажмите F5 на проекте. Устраните эту проблему.


0

Я обнаружил, что это хорошо работает с Spring 3.1.1, в которой также есть версия 3.0.6. Как только я установил плагины и поместил их в правильную область pom и включил argline и endorseddirs, чтобы источники java были помещены в папку target / generated-sources / cxf, maven сгенерировал источники в порядке.

....

 <properties>...

   <dependencyManagement>
      <dependencies>.....
   </dependencyManagement>

<dependencies>
   <dependency>....

</dependencies>



<!-- *************************** Build process ************************************* -->
<build>
    <finalName>eSurety</finalName>
    <plugins>
        <!-- Force Java 6 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.4</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- Deployent on AS from console
        <plugin>
            <groupId>org.jboss.as.plugins</groupId>
            <artifactId>jboss-as-maven-plugin</artifactId>
            <version>${version.jboss.as.maven.plugin}</version>
        </plugin>
        -->

        <!-- wildbill added tomcat plugin -->
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.0</version>              
        </plugin>

        <!-- Surefire plugin before 2.9 version is buggy. No need to declare here,
              it's being referenced below w/ the version
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
        </plugin>
        -->

        <!-- developer added these -->   
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.12</version>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>           
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArguments>
                    <endorseddirs>target/generated-sources/cxf</endorseddirs>
                </compilerArguments>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <forkMode>once</forkMode>
                <argLine>-Djava.endorsed.dirs=target/generated-sources/cxf</argLine>
            </configuration>
        </plugin>                       
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>                       
            <configuration>
                <artifactItems>
                    <artifactItem>
                        <groupId>javax.xml.bind</groupId>
                        <artifactId>jaxb-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                    <artifactItem>
                        <groupId>javax.xml.ws</groupId>
                        <artifactId>jaxws-api</artifactId>
                        <version>2.2</version>
                    </artifactItem>
                </artifactItems>
                <outputDirectory>target/generated-sources/cxf</outputDirectory>
            </configuration>                      
        </plugin>                                                 
    </plugins>
</build>



<!-- *********************** Profiles ************************************ -->
<profiles>
    <profile>
        <!-- When built in OpenShift the 'openshift' profile will be 
            used when invoking mvn. -->
        <!-- Use this profile for any OpenShift specific customization 
            your app will need. -->
        <!-- By default that is to put the resulting archive into the 
            'deployments' folder. -->
        <!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
        <id>projName</id>
        <build>
            <plugins>                                                   
                <plugin>
                    <groupId>org.apache.cxf</groupId>
                    <artifactId>cxf-codegen-plugin</artifactId>
                    <version>2.5.2</version>                        
                    <executions>
                        <execution>
                            <id>process-sources</id>
                            <phase>generate-sources</phase>                                                                                               
                            <configuration>
                                <fork>once</fork>
                                <additionalJvmArgs>-Djava.endorsed.dirs=target/generated-sources/cxf</additionalJvmArgs>                                          
                            </configuration>
                            <goals>                             
                                <goal>wsdl2java</goal>
                            </goals>
                        </execution>
                    </executions>                       
                    <dependencies>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-impl</artifactId>
                           <version>2.2</version>
                        </dependency>
                        <dependency>
                           <groupId>com.sun.xml.bind</groupId>
                           <artifactId>jaxb-xjc</artifactId>
                           <version>2.2</version>
                        </dependency>
                     </dependencies>
                </plugin>

                <!-- Actual war created in default target dir -->
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>                                               
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Если ваша папка wsdl находится в $ {basedir} / src / main / resources, она найдет ее автоматически.

Надеюсь это поможет! ~ wildbill


0

В случае, если по какой-то причине вы не можете использовать плагин помощника по сборке самым простым способом (хотя и не таким удобным и несколько утомительным), я обнаружил, что с этим можно справиться:

  1. Разделите сгенерированный исходный код на отдельный проект или подмодуль.
  2. При работе с родительским проектом вы захотите оставить этот проект преимущественно закрытым или не импортированным в Eclipse.
  3. В родительском проекте, которому требуется сгенерированный код, убедитесь, что теперь он зависит от сгенерированного проекта исходного кода через зависимость Maven pom.
  4. Когда вам нужно обновить сгенерированный код, перейдите в проект сгенерированного кода и запустите mvn install. Теперь обновите родительский проект, щелкнув правой кнопкой мыши и выбрав Maven-> Обновить проект ...

Обычно это хорошо работает для проектов, которые используют полустатический источник для генерации кода, такой как SOAP WSDL (Apache CXF) или код, созданный из базы данных (jOOQ). Для APT и другого AspectJ-подобного кода это не работает, потому что вы часто редактируете исходный код.


-1

конфигурация плагина помощника сборки действительно сработала для нас.

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

например, плагин maven-processor-plugin по умолчанию использует целевую папку $ {project.build.directory} / generated-sources / apt. если вы хотите другое место назначения для ваших сгенерированных исходных файлов, вы можете установить его с помощью тега, как показано ниже.

<plugin>
<groupId>org.bsc.maven</groupId>
                <artifactId>maven-processor-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>process</id>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <defaultOutputDirectory>apt_generated</defaultOutputDirectory>
                            <processors>
                                <processor>com.any.processor.invoker</processor>
                            </processors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

-3

Вот решение

  1. Открыть вид маркера (Окно> Показать вид
  2. Щелкните правой кнопкой мыши сообщение об ошибке
  3. Выберите быстрое исправление
  4. Нажмите Готово
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.