如何让Eclipse解析使用Maven 2生成的类?

Han*_*etz 49 eclipse maven-2 code-generation protocol-buffers

我正在使用Google Protocol Buffers为我的项目生成一些Java类.使用Maven 2及其"antrun"插件,这些类在编译之前新生成,输出到目标/生成源并在构建期间放入类路径.因此,从POM构建项目是没有问题的.

但是,Eclipse不知道如何解析生成的类,因为它所在的文件夹在开发过程中似乎不在IDE的类路径中.我正在使用m2eclipse并让它为我管理依赖项,所以我原本期望Maven能够处理这个问题.

如何为生成的代码获得IDE支持(代码完成等)?

Aar*_*lla 27

m2eclipse不支持这个.您必须手动将该文件夹添加target/generated-sources为源文件夹.当你告诉m2eclipse"更新项目配置"时,这将被覆盖,你必须恢复它.

另外,确保Eclipse在工作区中查找更改.

但是可能存在一些问题.最终,您将遇到错误,某些类无法编译,因为某些其他类无法解析.但是,代码完成将起作用.这个问题的根本原因是,当Maven更改类文件时,Eclipse会感到困惑target.

要解决这个问题,您必须告诉Eclipse 编译到与Maven不同的地方.


kop*_*por 22

m2eclipse支持这个.首先,添加构建路径的路径:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <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>
Run Code Online (Sandbox Code Playgroud)

其次,增加对m2e的支持:

<pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.eclipse.m2e</groupId>
            <artifactId>lifecycle-mapping</artifactId>
            <version>1.0.0</version>
            <configuration>
                <lifecycleMappingMetadata>
                      <pluginExecutions>
                        <pluginExecution>
                          <pluginExecutionFilter>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>build-helper-maven-plugin</artifactId>
                            <versionRange>[1.0,)</versionRange>
                            <goals>
                              <goal>parse-version</goal>
                              <goal>add-source</goal>
                              <goal>maven-version</goal>
                              <goal>add-resource</goal>
                              <goal>add-test-resource</goal>
                              <goal>add-test-source</goal>
                            </goals>
                          </pluginExecutionFilter>
                          <action>
                            <execute>
                              <runOnConfiguration>true</runOnConfiguration>
                              <runOnIncremental>true</runOnIncremental>
                            </execute>
                          </action>
                        </pluginExecution>
                    </pluginExecutions>
                </lifecycleMappingMetadata>
            </configuration>
        </plugin>
    </plugins>
</pluginManagement>
Run Code Online (Sandbox Code Playgroud)

如果您的eclipse安装已安装"org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml"插件,则可能不需要第二步.这个插件可以通过Window - > Preferences - > Maven - > Discovery获得.目前,这在Eclipse Kepler中不起作用,因此,我获取了JAR(从目录URL中显示的xml链接)并从org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml手工提取片段.


Han*_*etz 13

您应该在项目资源管理器中看到的是一个名为"Maven Dependencies"的容器,而不是通常的"Referenced库".这意味着m2eclipse正在管理您的构建路径.

在我的例子中,为了达到这个目的,我在Project-> Properties的"Maven"部分检查了"包含模块"并取消选中"处理资源时跳过Maven编译器插件".

  • @HannoFietz:我有同样的问题,在Maven部分找不到这些选项.新版本有不同的方式吗? (15认同)

Mic*_*urd 12

我个人通过将生成的类设置为单独的项目并使其成为我的主(非生成)项目中的依赖项来解决此问题.我使用wsdl2java生成webservice类,所以我的子项目中的"源"是wdsl和xsds.即使wsdl经常变化,也能很好地工作.


Jon*_*ono 9

我在使用Maven和wsdl2java生成的代码时遇到了这个问题,这就是我在Eclipse Juno中所做的解决方法.假设我的项目名为project1:

  1. 右键单击project1并选择"属性"
  2. 从左侧选择Java Build Path,然后选择Libraries选项卡
  3. 单击添加类文件夹
  4. 选择bin目录并单击OK(project1/target/generated-sources/bin)
  5. 单击"确定"并刷新项目

作为额外的奖励,您还可以附加源代码:

  1. 单击刚刚创建的新类文件夹旁边的箭头
  2. 单击"源附件"
  3. 单击"编辑"按钮
  4. 将路径设置为/ project1/target/generated-sources/axis2/src
  5. 单击确定

  • +1请注意,您必须启用自动刷新,或者每次从命令行运行Maven时都必须手动刷新项目.否则,您将在Eclipse中遇到非常奇怪的错误. (2认同)

小智 6

  1. 右键单击项目并选择属性
  2. 从左侧选择 Java Build Path,然后选择 Source 选项卡
  3. 单击添加文件夹
  4. 选择bin目录,点击确定
  5. (project/target/ generated-sources/xxxx) 单击“确定”并刷新项目