2009-07-28 83 views
40

我正在使用Google Protocol Buffers为我的项目生成一些Java类。使用Maven 2及其“antrun”插件,这些类是在编译之前新生成的,在构建期间输出到目标/生成源并放到类路径中。所以从POM构建项目是没有问题的。如何获得Eclipse来解析使用Maven 2生成的类?

但是,Eclipse不知道如何解析生成的类,因为它在开发过程中似乎不在IDE的类路径中。我正在使用m2eclipse,并为它管理依赖关系,所以我期望Maven能够照顾到这一点。

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

+0

我发布了这个问题和一个(可能的)答案,因为我正在尝试一些事情,部分是为了分享我学习的东西d,部分原因是,尽管我最终完成了这项工作,但我仍然不明白为什么。 – 2009-07-28 08:28:34

+0

问题http://stackoverflow.com/q/7160006/873282似乎是相关的。答案http://stackoverflow.com/a/7160614/873282建议最终与APT M2E连接器一起使用build-helper插件。目前,它与M2E和Eclipse开普勒不兼容。 – koppor 2013-11-26 18:17:52

回答

13

你应该在你的项目资源管理器中看到的是一个名为container“的Maven依赖“来代替通常的”引用库“。这意味着m2eclipse正在管理你的构建路径。

在我的情况下,为了达到这个目的,我在Project-> Properties的“Maven”部分选中了“包含模块”和un勾选了“处理资源时跳过Maven编译器插件”。

+0

m2eclipse:对,好点。+1我的回答是更一般的 – VonC 2009-07-28 08:37:33

+0

我现在想知道m2eclipse是否曾经在我做过这些设置之前管理过任何依赖关系,因为我的依赖现在看起来大不相同。奇怪的。 (几天前我只有Maven化这个项目,也许这是问题的一部分) – 2009-07-28 08:51:41

+14

@HannoFietz:我有同样的问题,并找不到Maven部分中的这些选项。新版本有不同的方法吗? – letmaik 2012-08-24 10:13:35

2

您是否尝试刷新Eclipse项目?

alt text http://oyvindhauge.com/blog/wp-content/eclipse_refresh.png

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

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

alt text http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif

+0

是的,我做到了。我也做了项目 - >清洁。看来,maven的“编译”目标必须被调用(请参阅下面我自己的答案),但我仍然很不确定Maven-Eclipse集成是如何工作的。 – 2009-07-28 08:24:38

+0

哈哈它经过几次清理和刷新(在日食霓虹灯3)后为我工作。谢谢! +1 – erginduran 2017-05-12 18:27:22

21

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

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

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

要解决这个问题,你必须告诉Eclipse到compile to a different place than Maven

12

就我个人而言,我通过将生成的类设置为独立项目并在主(非生成)项目中使其成为依赖项来解决此问题。我使用wsdl2java生成webservice类,所以我的子项目中的“源”是wdsl和xsds。即使wsdl定期更换,工作也很好。

9

我遇到了使用Maven和wsdl2java生成的代码的问题,这里是我在Eclipse Juno中解决它的问题。假设我的项目名为Project:

  1. 右击Project并选择属性
  2. 选择Java从左边的构建路径,并选择Libraries选项卡
  3. 单击添加类文件夹
  4. 选择斌目录并单击确定(project1/target/generated-sources/bin)
  5. 单击确定并刷新项目

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

  1. 点击旁边的箭头,你刚刚创建的源连接件
  2. 单击新的类文件夹
  3. 单击编辑按钮
  4. 将路径设置为/ PROJECT1 /目标/生成来源/ Axis2的/ src目录
  5. 单击确定
19

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已经安装了“组织.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml“插件。这个插件可以通过窗口 - >首选项 - > Maven - >发现。目前,在Eclipse Kepler中这不起作用,因此,我提取了JAR(从Catalog URL中显示的xml链接),并手工从org.eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml中提取了片段。

1
  1. 右键单击项目并选择属性
  2. 选择Java构建Pathfrom左侧,然后选择源选项卡
  3. 单击添加文件夹
  4. 选择bin目录,然后单击确定
  5. (项目/目标/ generated-sources/xxxx)点击OK并刷新项目
相关问题