我使用谷歌协议缓冲器生成一些Java类为我的项目。 使用Maven 2和它的“antrun”插件,这些类新鲜之前产生编译,输出到目标/生成来源和在生成过程中把类路径上。 所以从建POM项目是没有问题的。
但是,Eclipse不知道如何解决生成的类,因为它是在文件夹似乎并没有成为发展过程中的IDE的类。 我使用m2eclipse的,并已为我管理依赖性,所以我曾预计Maven来照顾这。
我怎样才能为生成的代码支持IDE(代码完成等)?
我使用谷歌协议缓冲器生成一些Java类为我的项目。 使用Maven 2和它的“antrun”插件,这些类新鲜之前产生编译,输出到目标/生成来源和在生成过程中把类路径上。 所以从建POM项目是没有问题的。
但是,Eclipse不知道如何解决生成的类,因为它是在文件夹似乎并没有成为发展过程中的IDE的类。 我使用m2eclipse的,并已为我管理依赖性,所以我曾预计Maven来照顾这。
我怎样才能为生成的代码支持IDE(代码完成等)?
m2eclipse的不支持此。 必须手动添加的文件夹target/generated-sources
作为源文件夹。 当你告诉m2eclipse的以“更新项目配置”,这将被覆盖,你必须恢复它。
此外,确保了Eclipse会在工作区的变化。
可能有一些问题,但。 最终,你会碰到一些类不能被编译,因为一些其他的类不能得到解决的错误。 代码完成将工作,虽然。 这个问题的根源是当Maven改变类文件的Eclipse迷糊target
。
为了解决这个问题,你一定要告诉Eclipse来编译成不同的地方比Maven的 。
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
手。
你应该在你的项目资源管理器中看到的是一个代替通常的“参考图书馆”命名为“Maven依赖”容器。 这意味着m2eclipse的是管理您的构建路径。
在我的情况下,实现这一目标,我选中了“包括模块”和联合国项目- >属性的“Maven的”部分“处理资源时跳过的Maven编译器插件”检查。
个人而言,我决心通过设置生成的类作为一个单独的项目这个问题,在我的主(非生成)项目取得它的依赖性。 我使用的WSDL2Java生成Web服务类,使“源”在我的个子项目是WDSL和XSD。 运作良好,即使在WSDL,定期更换。
我曾与使用Maven生成的代码和WSDL2Java这个问题,这是我在Eclipse朱诺没有解决这个问题。 假设我的项目名为Project:
- 右击Project并选择属性
- 从左边选择Java构建路径,然后选择库选项卡
- 单击添加类文件夹
- 选择bin目录,然后单击OK(PROJECT1 /目标/生成来源/箱)
- 单击确定,然后刷新项目
作为额外的奖励,你还可以将源代码:
- 点击您刚刚创建的新的类文件夹中的箭头
- 点击源代码连接
- 单击编辑按钮
- 将路径设置为/ PROJECT1 /目标/生成来源/ Axis2的/ src目录
- 点击OK
你有没有尝试刷新Eclipse项目?
(来源: oyvindhauge.com )
当外部工具生成新文件或更新旧的,Eclipse将无法检测,直到下一个请求的变化。
另一种选择是定义一个新的自定义生成器,指定为构建器“完成时刷新资源”:
替代文字http://www.cs.lth.se/EDA180/2005/Verktyg/eclipse_refresh.gif
我怎样才能为生成的代码支持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
...
特征!
要生成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
目录
我建议安装协议缓冲区描述符编辑器 ( 市场链接 )
祝好运!