我如何获得Eclipse来解决与Maven 2生成的类?(How do I get Eclipse

2019-06-26 23:38发布

我使用谷歌协议缓冲器生成一些Java类为我的项目。 使用Maven 2和它的“antrun”插件,这些类新鲜之前产生编译,输出到目标/生成来源和在生成过程中把类路径上。 所以从建POM项目是没有问题的。

但是,Eclipse不知道如何解决生成的类,因为它是在文件夹似乎并没有成为发展过程中的IDE的类。 我使用m2eclipse的,并已为我管理依赖性,所以我曾预计Maven来照顾这。

我怎样才能为生成的代码支持IDE(代码完成等)?

Answer 1:

m2eclipse的不支持此。 必须手动添加的文件夹target/generated-sources作为源文件夹。 当你告诉m2eclipse的以“更新项目配置”,这将被覆盖,你必须恢复它。

此外,确保了Eclipse会在工作区的变化。

可能有一些问题,但。 最终,你会碰到一些类不能被编译,因为一些其他的类不能得到解决的错误。 代码完成将工作,虽然。 这个问题的根源是当Maven改变类文件的Eclipse迷糊target

为了解决这个问题,你一定要告诉Eclipse来编译成不同的地方比Maven的 。



Answer 2:

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开普勒的工作,因此,我拿来了JAR(从显示的XML链接目录URL )和提取片段org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml手。



Answer 3:

你应该在你的项目资源管理器中看到的是一个代替通常的“参考图书馆”命名为“Maven依赖”容器。 这意味着m2eclipse的是管理您的构建路径。

在我的情况下,实现这一目标,我选中了“包括模块”和联合国项目- >属性的“Maven的”部分“处理资源时跳过的Maven编译器插件”检查。



Answer 4:

个人而言,我决心通过设置生成的类作为一个单独的项目这个问题,在我的主(非生成)项目取得它的依赖性。 我使用的WSDL2Java生成Web服务类,使“源”在我的个子项目是WDSL和XSD。 运作良好,即使在WSDL,定期更换。



Answer 5:

我曾与使用Maven生成的代码和WSDL2Java这个问题,这是我在Eclipse朱诺没有解决这个问题。 假设我的项目名为Project:

  1. 右击Project并选择属性
  2. 从左边选择Java构建路径,然后选择库选项卡
  3. 单击添加类文件夹
  4. 选择bin目录,然后单击OK(PROJECT1 /目标/生成来源/箱)
  5. 单击确定,然后刷新项目

作为额外的奖励,你还可以将源代码:

  1. 点击您刚刚创建的新的类文件夹中的箭头
  2. 点击源代码连接
  3. 单击编辑按钮
  4. 将路径设置为/ PROJECT1 /目标/生成来源/ Axis2的/ src目录
  5. 点击OK


Answer 6:

  1. 右键单击项目并选择属性
  2. 选择Java构建Pathfrom左侧,然后选择源选项卡
  3. 单击Add Folder
  4. 选择bin目录,然后单击确定
  5. (项目/目标/生成来源/ XXXX)单击确定,然后刷新项目


Answer 7:

你有没有尝试刷新Eclipse项目?


(来源: oyvindhauge.com )

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

另一种选择是定义一个新的自定义生成器,指定为构建器“完成时刷新资源”:

替代文字http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif



Answer 8:

我怎样才能为生成的代码支持IDE(代码完成等)?

通常我会在@ koppor的回答中描述的M2E生命周期映射插件添加到pom.xml文件。 但是加入每Eclipse代码到我的pom.xml的文件是不是在工作中选择其中大部分是一个的IntelliJ店。

我的解决办法首先增加了build-helper-maven-plugin ,其作品在命令行罚款,但没有在Eclipse中的pom.xml。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <phase>generate-sources</phase>
            <goals>
                <goal>add-source</goal>
            </goals>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

要解决月食我安装的是公寓M2E连接器从Eclipse市场。 我觉得事情开始工作,我重新启动之后再重建了我所有的项目。 我现在看到我的源代码显示目录如下:

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

特征!



Answer 9:

要生成Java源文件.proto文件中使用Protocol Buffers的插件能够统计出的最现成的日食氧气。

基本用法( 在这里看到详细的说明 ):

  • 确保本地protoc编译器安装在系统上

  • 更新你pom.xml文件:

    • 确保你至少使用了Java 6(Java的7+推荐)

    • 添加插件调用

    • 添加相应的依赖于com.google.protobuf:protobuf-java

  • 把你的.proto文件项目内src/main/proto目录

  • 更新项目(通过Maven -> Update project...

实施例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>

一些补充说明:

  • 如果protoc可执行文件是在路径中protocExecutable配置条目可以省略

  • 测试只protobuf的消息定义可投入项目src/test/proto目录

  • 我建议安装协议缓冲区描述符编辑器 ( 市场链接 )

祝好运!



文章来源: How do I get Eclipse to resolve classes generated with Maven 2?