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

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

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

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

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

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

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

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

Ответ 1

Вам нужно прикрепить исходный каталог 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" из Marketplace Eclipse. Для этого щелкните по ошибке на вкладке "Обзор" вашего pom.xml и выберите "Discover".
  • Убедитесь, что для модуля build-helper-maven-plugin нет фильтров для создания плагина (см. https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html)

Ответ 2

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

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

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

Ответ 3

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

Чтобы устранить проблему в Eclipse, не добавляя "apt-generated" -панель через Update Maven Configuration в M2E, я написал M2E-плагин, чтобы исправить эту проблему. Он добавляет выходные каталоги, настроенные в maven-apt-plugin, к пути сборки проекта.

https://apt-m2e.googlecode.com

Ответ 4

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

Этот отчет отчет об ошибке также может быть релевантным.

Ответ 5

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.

Ответ 6

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

Ответ 7

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 на проекте. Устраните эту проблему.

Ответ 8

Это было то, что я нашел, что работал хорошо, используя spring 3.1.1, который также имеет версию 3.0.6. Как только я получил настройки плагинов и поместил их в правильную область помпы и включил 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 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

Ответ 9

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

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

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

Ответ 10

конфигурация плагина сборки для сборки работала для нас.

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

например, 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>

Ответ 11

Вот решение

  • Открыть представление маркера (окно > Показать представление
  • Щелкните правой кнопкой мыши сообщение об ошибке
  • Выберите "Быстрое исправление"
  • Нажмите "Готово"