M2E и maven сгенерировал исходные папки как исходные папки затмения - PullRequest
88 голосов
/ 23 августа 2011

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

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

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

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

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

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

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

Ответы [ 11 ]

103 голосов
/ 23 августа 2011

Вам необходимо подключить исходный каталог с помощью 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)
80 голосов
/ 04 января 2012

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

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

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

4 голосов
/ 24 февраля 2012

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

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

https://apt -m2e.googlecode.com

3 голосов
/ 23 августа 2011

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

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

1 голос
/ 11 августа 2012

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 голосов
/ 12 июля 2016

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

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

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

0 голосов
/ 21 июня 2013

Вот решение

  1. Открыть представление маркера (Окно> Показать представление
  2. Щелкните правой кнопкой мыши сообщение об ошибке
  3. Выберите Quick Fix
  4. Нажмите Готово
0 голосов
/ 13 мая 2013

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

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

например, плагин maven-processor-plugin использует целевую папку $ {project.build.directory} / generate-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>
0 голосов
/ 01 мая 2013

Это было то, что я нашел, что работало хорошо, используя Spring 3.1.1, который также имеет версию 3.0.6.Как только я установил плагины и поместил их в нужную область pom, включил argline и endorseddirs для размещения исходных файлов java в папке target / generate-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 голосов
/ 29 января 2013

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 в проекте.Исправьте эту проблему.

...