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

如何让Eclipse解析使用Maven 2生成的类?,eclipse,maven-2,code-generation,protocol-buffers,Eclipse,Maven 2,Code Generation,Protocol Buffers,我正在使用Google协议缓冲区为我的项目生成一些Java类。使用Maven 2及其“antrun”插件,这些类在编译之前新生成,输出到目标/生成的源代码,并在构建期间放在类路径上。因此,从POM构建项目是没有问题的 但是,Eclipse不知道如何解析生成的类,因为它所在的文件夹在开发期间似乎不在IDE的类路径上。我正在使用m2eclipse,并让它为我管理依赖项,所以我希望Maven能够处理这个问题 如何获得生成代码的IDE支持(代码完成等)?您是否尝试刷新Eclipse项目 (来源:) 当

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

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


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

您是否尝试刷新Eclipse项目


(来源:)

当外部工具生成新文件或更新旧文件时,Eclipse将无法检测到更改,直到下一个请求

另一个选项是定义新的自定义生成器,指定该生成器“完成后刷新资源”:


您应该在project explorer中看到一个名为“Maven Dependencies”的容器,而不是通常的“引用库”。这意味着m2eclipse正在管理您的构建路径


在我的例子中,为了实现这一点,我在Project->Properties的“Maven”部分选中了“Include Modules”,并取消选中了“Skip Maven compiler plugin when processing resources”。

m2eclipse不支持这一点。必须手动将文件夹
目标/生成的源添加为源文件夹。当您告诉m2eclipse“更新项目配置”时,这将被覆盖,您必须恢复它

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

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


要解决这个问题,您必须告诉Eclipse。

我个人解决了这个问题,将生成的类设置为一个单独的项目,并使其成为我的主(非生成)项目中的一个依赖项。我使用wsdl2java生成Web服务类,因此我的子项目中的“源”是wdsl和XSD。即使wsdl定期更改,也能正常工作。

我在使用Maven和wsdl2java生成的代码中遇到了这个问题,下面是我在EclipseJuno中解决这个问题的方法。假设我的项目名为project1:

  • 右键单击项目1并选择属性
  • 从左侧选择Java构建路径并选择Libraries选项卡
  • 单击添加类文件夹
  • 选择bin目录并单击OK(project1/target/generated sources/bin)
  • 单击“确定”并刷新项目
  • 作为额外的奖励,您还可以附加源代码:

  • 单击刚刚创建的新类文件夹旁边的箭头
  • 点击源附件
  • 单击编辑按钮
  • 将路径设置为/project1/target/generated sources/axis2/src
  • 单击“确定”

  • m2eclipse支持这一点。首先,将路径添加到生成路径:

    
    org.codehaus.mojo
    )并手动从
    org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml
    中提取片段

  • 在项目上单击鼠标右键,然后选择“属性”
  • 从左侧选择Java构建路径并选择Source选项卡
  • 单击添加文件夹
  • 选择bin目录并单击OK
  • (项目/目标/生成的源/xxxx)单击确定并刷新项目
  • 如何获得生成代码的IDE支持(代码完成等)

    通常,我会将m2e生命周期映射插件添加到pom.xml文件中,如@koppor的回答中所述。然而,在我的pom.xml文件中添加每eclipse代码并不是工作中的一个选项,这主要是一个IntelliJ商店

    我的解决方案首先在pom.xml中添加了
    buildhelpermaven插件
    ,该插件在命令行中运行良好,但在eclipse中不起作用

    
    org.codehaus.mojo
    来自Eclipse市场。我想在我重新启动并重建所有项目之后,事情就开始运转了。我现在在我的源目录中看到以下内容:

    src/main/java
    target/generated-sources
    ...
    

    特写

    要从
    .proto
    文件生成Java源文件,请使用eclipse中现成的

    基本用法():

    • 确保本机
      protoc
      编译器

    • 更新您的
      pom.xml
      文件:

      • 确保至少使用Java 6(建议使用Java 7+)

      • 添加插件调用

      • com.google.protobuf:protobufjava添加相应的依赖项

    • 将.proto文件放在项目的
      src/main/proto
      目录中

    • 更新项目(通过
      Maven->updateproject…

    示例
    pom.xml

    <project>
      ...
      <build>
        <plugins>
          <!-- Require at least Java 6 -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
              <source>1.6</source>
              <target>1.6</target>
            </configuration>
          </plugin>
          <!-- Generate .java files from .proto definitions -->
          <plugin>
            <groupId>org.xolstice.maven.plugins</groupId>
            <artifactId>protobuf-maven-plugin</artifactId>
            <version>0.5.1</version>
            <configuration>
              <protocExecutable>/usr/local/bin/protoc</protocExecutable>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>compile</goal>
                  <goal>test-compile</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          ...
        </plugins>
      </build>
      <dependencies>
        <dependency>
          <groupId>com.google.protobuf</groupId>
          <artifactId>protobuf-java</artifactId>
          <version>3.5.1</version>
        </dependency>
        ...
      </dependencies>
      ...
    </project>
    
    
    ...
    org.apache.maven.plugins
    ()


    祝你好运

    是的。我还做了项目->清洁。似乎必须调用maven的“编译”目标(见下面我自己的答案),但我仍然不确定maven Eclipse集成到底是如何工作的。哈哈,在几次清理和刷新之后(在EclipseNeon3上),它对我起了作用。谢谢大家!+1我在尝试时发布了这个问题和一个(可能的)答案,一部分是为了分享我学到的东西,另一部分是因为,尽管我最终让它发挥了作用,但我仍然不明白为什么。这个问题似乎是相关的。答案建议最终与APT M2E连接器一起使用build helper插件。目前,M2E和Eclipse开普勒在我这边不起作用。嗯,很有趣。我有点希望m2eclipse能够神奇地调整Eclipse的进程