M2E і мавен створив вихідні папки як вихідні папки затемнення


91

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

Щоб eclipse бачив цей згенерований код, мені потрібно додати target / generated-sources / apt як вихідну папку до проекту eclipse.

Однак це спричиняє помилку типу "Проблема конфігурації Maven"

Конфігурація проекту не є сучасною з pom.xml. Запустіть оновлення конфігурації проекту

Думаю, я розумію, чому це так, оскільки eclipse має інший набір вихідних папок, ніж набір maven. Але мені потрібен цей інший набір, оскільки мені потрібне затемнення, щоб бачити створені вихідні папки ...

При виконанні чистого 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" від 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
Бред Купіт,

Не працює у мене. Чи можете Ви детальніше розповісти про налаштування вбудованого допоміжного модуля?
Кевін Вонг,

<plugin> <groupId> org.codehaus.mojo </groupId> <artifactId> build-helper-maven-plugin </artifactId> <executions> <execution> <id> add-source </id> <phase> generated- sources </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 для допоміжного модуля build mapen. (Просто відкрийте свою пам'ять всередині редактора 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" -папки з buildhelper.

Щоб виправити проблему в Eclipse, не додаючи "згенеровану apt" -папку за допомогою оновлення конфігурації 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 є новим та має багато видатних розробок
Michael Wiles

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

2

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

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


0

Ви також можете використовувати роз'єм buildhelper m2e, доступний у каталозі виявлення. Я використовую 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. Після того, як я налаштував плагіни і помістив їх у потрібну область пам’яті, включив 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-> Update Project ...

Як правило, це добре працює для проектів, які використовують напівстатичне джерело для генерації коду, наприклад, SOAP WSDL (Apache CXF) або код, згенерований з бази даних (jOOQ). Для APT та інших подібних до AspectJ кодів це не працює, оскільки ви часто редагуєте джерело.


-1

конфігурація допоміжного модуля збірки справді працювала для нас.

але майте на увазі, що цільова папка завжди повинна дорівнювати конфігурації плагіна, який ви використовуєте для самої обробки анотацій.

наприклад, плагін maven-процесор використовує цільову папку $ {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.