M2E и имеющие Maven генерируемые исходные папки в качестве исходных папок eclipse


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

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

однако, это приводит к ошибке типа "Maven Configuration Problem" говоря

конфигурация проекта не до современных с пом.XML. Запустить проект обновление конфигурации

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

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

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

11 83

11 ответов:

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

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

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

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

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

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

https://apt-m2e.googlecode.com

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

этой сообщить об ошибке также может иметь значение.

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

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

можно также использовать разъем buildhelper m2e, доступный в каталоге обнаружения. Я использую Eclipse 3.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 на проекте. Устранение этой проблемы.

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

....

 <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, она найдет ее автоматически

надеюсь, что это помогает! ~него: D

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

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

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

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

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

например, плагин Maven-processor использует целевую папку ${project.строить.каталог} / 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>

вот решение

  1. Открыть Вид Маркера (Окно > Показать Вид
  2. щелкните правой кнопкой мыши на сообщение об ошибке
  3. Выберите Быстрое Исправление
  4. Нажмите Кнопку Готово