M2E,并将Maven生成的源文件夹作为Eclipse源文件夹


91

我在Eclipse中有一个Maven项目,并且有运行注释处理器生成代码的Maven目标。此代码的输出文件夹是target / generated-sources / apt。

为了使eclipse看到此生成的代码,我需要将target / generated-sources / apt作为源文件夹添加到eclipse项目。

但是,这导致出现“ Maven配置问题”类型的错误,提示

pom.xml的项目配置不是最新的。运行项目配置更新

我想我理解为什么会这样,因为eclipse的源文件夹与maven的文件夹不同。但是我需要这个不同的集合,因为我需要蚀才能看到生成的源文件夹...

当执行纯Maven构建时,这些源文件夹将由Maven包含在构建中。

顺便说一句,我已经升级到maven eclipse插件m2e 1.0的正式eclipse版本-以前是m2eclipse。我想看看我是否可以使用m2e插件找到解决方法/解决方案,然后再回到旧的m2eclipse版本。

Answers:


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>

您还需要:


4
m2e connector for build-helper-maven-plugin在Eclipse中安装时,此解决方案效果很好
Brad Cupit 2012年

对我不起作用。您能否详细说明build-helper-plugin的设置?
Kevin Wong)

<plugin> <groupId> org.codehaus.mojo </ groupId> <artifactId> build-helper-maven-plugin </ artifactId> <executions> <execution> <id> add-source </ id> <phase> generate-来源</ phase> <goals> <goal>添加源</ goal> </ goals> <configuration> <sources> <source> $ {project.build.directory} / genic-sources / java / </ source> <source> $ {project.build.directory} / jaxws / wsimport / java </ source> </ sources> </ configuration> </ execution> </ executions> </ plugin>
Kevin Wong

2
使用开普勒,我还必须安装m2e连接器以构建辅助maven插件。(只需在Eclipse的maven pom编辑器中打开pom,然后单击顶部的红色链接)。
尼古拉斯

1
据我所知,作为build-helper-maven-plugin<version>指定为3.2.0(最新写作的),也没有必要使用apt M2E连接器。当前正在Eclipse IDE 2020-06上运行,在Eclipse中使用嵌入式Maven 3.6.3,并且尝试在其中添加源文件夹的目录路径后,源文件夹带有排除项(**)的问题消失了。现在,所有包含项都具有(** / *。java)。
tom_mai78101

80

右键单击错误消息:

pom.xml的项目配置不是最新的运行项目配置更新

在问题视图中,选择快速修复,然后单击完成以选择默认的更新项目配置。这样就解决了。


1
这也对我有用。为什么这不是公认的答案?似乎已接受的答案做得太多。
Niels Basjes 2012年

14
@NielsBasjes,这不是公认的答案,因为它根本没有帮助。在Eclipse中向构建路径添加内容时,这意味着您不再与POM同步,因此发出警告。更新项目配置只需删除多余的构建路径条目,这是最初要解决的问题。
Phil

4

切换到m2e / maven / apt的新版本后,...由于buildhelper添加了buildpath,导致文件重复,因此出现了构建错误,因此我需要从buildhelper中删除“ apt生成的”文件夹。

为了解决Eclipse中的问题,而不是通过M2E中的Update Maven Configuration添加“ apt-generation”文件夹,我编写了一个M2E插件来解决此问题。它将在maven-apt-plugin中配置的outputDirectories添加到Project的构建路径。

https://apt-m2e.googlecode.com


1
不幸的是,@ Stefan Wo,您的插件页面/存储库现在在googlecode.com上是404;您介意更新它以及Eclipse Marketplace条目吗?参见marketplace.eclipse.org/content/apt-m2e-connector
maxxyme

3

在m2e 1.0中,对Maven插件的处理已更改。您的代码生成插件可能缺少特定的m2e扩展。这是我设法找到的所有文档

错误报告也可能是相关的。


我猜m2e是新的,并且有很多出色的发展
Michael Wiles

2
我相信问题在于,像m2eclipse过去那样,仅将Maven插件应用于m2eclipse项目就在大多数时候碰巧起作用,但不能保证总是做正确的事。新方法可能更可靠,但需要许多Maven插件具有m2e对应物。
Nicola Musatti



0

用于Web开发人员的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的效果很好,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

如果由于某种原因您不能以最简单的方式使用构建助手插件(尽管不那么方便且有些乏味),我发现可以解决此问题:

  1. 将生成的源代码分成其自己的项目或子模块。
  2. 在处理父项目时,您将希望主要关闭该项目或不将其导入Eclipse。
  3. 在需要生成代码的父项目中,请确保现在通过Maven pom依赖项依赖于生成的源代码项目。
  4. 当您需要更新生成的代码时,请转到生成的代码项目并运行mvn install。现在,通过右键单击并选择Maven-> Update Project ...刷新父项目

这通常适用于使用半静态源进行代码生成的项目,例如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. 点击完成
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.