Percy

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

java

我正在使用Google协议缓冲区为我的项目生成一些Java类。使用Maven 2及其“ antrun”插件,这些类在编译之前重新生成,输出到目标/生成源,并在构建过程中放在类路径中。因此,从POM构建项目是没有问题的。

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

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


阅读 349

收藏
2020-12-04

共3个答案

一尘不染

在项目浏览器中应该看到的是一个名为“ Maven Dependencies”的容器,代替了通常的“参考库”。这意味着m2eclipse正在管理您的构建路径。

就我而言,要实现此目的,我在“项目”->“属性”的“ Maven”部分中选中了“包括模块”,而未选中“在处理资源时跳过Maven编译器插件”。

2020-12-04
一尘不染

m2eclipse不支持此功能。您必须手动将文件夹添加target/generated-sources为源文件夹。当您告诉m2eclipse“更新项目配置”时,此内容将被覆盖,您必须将其还原。

另外,请确保Eclipse在工作空间中查找更改。

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

2020-12-04
一尘不染

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>

其次,在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>

如果您的eclipse安装已安装了“ org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml”插件,则可能无需执行第二步。可通过窗口->首选项-> Maven->发现使用此插件。当前,这在Eclipse Kepler上不起作用,因此,我获取了JAR(从Catalog URL中显示的xml链接到)并org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml手工提取了片段。

2020-12-04