Googleプロトコルバッファーを使用して、プロジェクトのJavaクラスを生成します。Maven2とその「antrun」プラグインを使用すると、これらのクラスはコンパイル前に新たに生成され、target/generated-sourcesに出力されますビルド中にクラスパスに配置するので、POMからプロジェクトをビルドしても問題はありません。
ただし、Eclipseは生成されたクラスを解決する方法を知りません。これは、Eclipseが含まれているフォルダーが開発中にIDEのクラスパス上にないようだからです。私はm2Eclipseを使用しており、依存関係を管理してくれるので、Mavenがこれを処理することを期待していました。
生成されたコードのIDEサポート(コード補完など)を取得するにはどうすればよいですか?
プロジェクトエクスプローラに表示されるのは、通常の「参照ライブラリ」の代わりに「Maven Dependencies」という名前のコンテナです。これは、m2Eclipseがビルドパスを管理していることを意味します。
私の場合、これを実現するために、「モジュールを含める」をチェックし、プロジェクトの「Maven」セクションで「リソースを処理するときにMavenコンパイラプラグインをスキップする」n checkedを選択しました。
m2Eclipseはこれをサポートしていません。フォルダーを手動で追加する必要がありますtarget/generated-sources
ソースフォルダーとして。 m2Eclipseに「プロジェクト構成の更新」を指示すると、これは上書きされ、復元する必要があります。
また、Eclipseがワークスペースの変更を探すようにしてください。
ただし、いくつかの問題がある可能性があります。最終的には、他のクラスを解決できないために、一部のクラスをコンパイルできないというエラーが発生します。ただし、コード補完は機能します。この問題の根本的な原因は、Mavenがtarget
のクラスファイルを変更するとEclipseが混乱することです。
これを解決するには、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」プラグインがインストールされている場合、2番目のステップは不要な場合があります。このプラグインは、Window-> Preferences-> Maven-> Discoveryから利用できます。現在、Eclipse Keplerでは動作しません。そのため、JAR( カタログURL に示されているxmlからリンクされています)をフェッチし、org.Eclipse.m2e.discovery.lifecyclemapping.buildhelper.xml
から手作業でフラグメントを抽出しました。
個人的には、生成されたクラスを個別のプロジェクトとして設定することでこの問題を解決し、メイン(生成されていない)プロジェクトの依存関係にしました。私はwsdl2Javaを使用してWebサービスクラスを生成していたため、サブプロジェクトの「ソース」はwdslとxsdsでした。 wsdlが定期的に変更されている場合でもうまく機能しました。
Mavenとwsdl2Javaを使用して生成されたコードでこの問題が発生しましたが、これを解決するためにEclipse Junoで行ったことを次に示します。私のプロジェクトの名前がproject1であるとします:
- Project1を右クリックし、[プロパティ]を選択します
- 左からJava Build Pathを選択し、[ライブラリ]タブを選択します
- [クラスフォルダーの追加]をクリックします
- Binディレクトリを選択して[OK]をクリックします(project1/target/generated-sources/bin)
- [OK]をクリックしてプロジェクトを更新します
追加のボーナスとして、ソースコードを添付することもできます。
- 作成した新しいクラスフォルダーの横にある矢印をクリックします
- ソースの添付ファイルをクリックします
- [編集]ボタンをクリックします
- パスを/ project1/target/generated-sources/axis2/srcに設定します
- OKをクリック
Eclipseプロジェクトを更新しようとしましたか?
(ソース: oyvindhauge.com )
外部ツールが新しいファイルを生成するか、古いファイルを更新すると、Eclipseは次のリクエストまで変更を検出できません。
別のオプションは、新しいカスタムビルダーを定義し、そのビルダーに「完了時にリソースを更新する」ように指定することです。
代替テキストhttp://www.cs.lth.se/EDA180/2005/Verktyg/Eclipse_refresh.gif
生成されたコードのIDEサポート(コード補完など)を取得するにはどうすればよいですか?
通常、@ kopporの回答で説明されているように、m2eライフサイクルマッピングプラグインをpom.xmlファイルに追加します。ただし、Emlipseごとのコードをpom.xmlファイルに追加することは、ほとんどがIntelliJショップである職場でのオプションではありません。
私のソリューションでは、最初にbuild-helper-maven-plugin
をpom.xmlに追加します。これはコマンドラインからは正常に機能しますが、Eclipseでは機能しません。
<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>
Eclipseを修正するために、Eclipse Marketplaceから Apt M2E Connector をインストールしました。リブートしてからすべてのプロジェクトを再構築した直後に、物事が機能し始めたと思います。ソースdirsに次のように表示されます。
src/main/Java
target/generated-sources
...
特徴!
Java .proto
ファイルからソースファイルを生成するには、Eclipse Oxygenですぐに使用できる Protocol Buffers Plugin を使用します。
基本的な使用法( 詳細な説明はこちらを参照 ):
ネイティブ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
実行可能ファイルがPATHにある場合、protocExecutable
構成エントリは省略できます
テスト専用のprotobufメッセージ定義は、プロジェクトのsrc/test/proto
ディレクトリに配置できます
Protocol Buffer Descriptor Editor ( marketplace link )をインストールすることをお勧めします
幸運を!