web-dev-qa-db-ja.com

Maven 2で生成されたクラスをEclipseで解決するにはどうすればよいですか?

Googleプロトコルバッファーを使用して、プロジェクトのJavaクラスを生成します。Maven2とその「antrun」プラグインを使用すると、これらのクラスはコンパイル前に新たに生成され、target/generated-sourcesに出力されますビルド中にクラスパスに配置するので、POMからプロジェクトをビルドしても問題はありません。

ただし、Eclipseは生成されたクラスを解決する方法を知りません。これは、Eclipseが含まれているフォルダーが開発中にIDEのクラスパス上にないようだからです。私はm2Eclipseを使用しており、依存関係を管理してくれるので、Mavenがこれを処理することを期待していました。

生成されたコードのIDEサポート(コード補完など)を取得するにはどうすればよいですか?

48
Hanno Fietz

プロジェクトエクスプローラに表示されるのは、通常の「参照ライブラリ」の代わりに「Maven Dependencies」という名前のコンテナです。これは、m2Eclipseがビルドパスを管理していることを意味します。

私の場合、これを実現するために、「モジュールを含める」をチェックし、プロジェクトの「Maven」セクションで「リソースを処理するときにMavenコンパイラプラグインをスキップする」n checkedを選択しました。

13
Hanno Fietz

m2Eclipseはこれをサポートしていません。フォルダーを手動で追加する必要がありますtarget/generated-sourcesソースフォルダーとして。 m2Eclipseに「プロジェクト構成の更新」を指示すると、これは上書きされ、復元する必要があります。

また、Eclipseがワークスペースの変更を探すようにしてください。

ただし、いくつかの問題がある可能性があります。最終的には、他のクラスを解決できないために、一部のクラスをコンパイルできないというエラーが発生します。ただし、コード補完は機能します。この問題の根本的な原因は、Mavenがtargetのクラスファイルを変更するとEclipseが混乱することです。

これを解決するには、Eclipseに Mavenとは別の場所にコンパイルする を指示する必要があります。

26
Aaron Digulla

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から手作業でフラグメントを抽出しました。

22
koppor

個人的には、生成されたクラスを個別のプロジェクトとして設定することでこの問題を解決し、メイン(生成されていない)プロジェクトの依存関係にしました。私はwsdl2Javaを使用してWebサービスクラスを生成していたため、サブプロジェクトの「ソース」はwdslとxsdsでした。 wsdlが定期的に変更されている場合でもうまく機能しました。

12

Mavenとwsdl2Javaを使用して生成されたコードでこの問題が発生しましたが、これを解決するためにEclipse Junoで行ったことを次に示します。私のプロジェクトの名前がproject1であるとします:

  1. Project1を右クリックし、[プロパティ]を選択します
  2. 左からJava Build Pathを選択し、[ライブラリ]タブを選択します
  3. [クラスフォルダーの追加]をクリックします
  4. Binディレクトリを選択して[OK]をクリックします(project1/target/generated-sources/bin)
  5. [OK]をクリックしてプロジェクトを更新します

追加のボーナスとして、ソースコードを添付することもできます。

  1. 作成した新しいクラスフォルダーの横にある矢印をクリックします
  2. ソースの添付ファイルをクリックします
  3. [編集]ボタンをクリックします
  4. パスを/ project1/target/generated-sources/axis2/srcに設定します
  5. OKをクリック
9
Jono

Eclipseプロジェクトを更新しようとしましたか?

alt text
(ソース: oyvindhauge.com

外部ツールが新しいファイルを生成するか、古いファイルを更新すると、Eclipseは次のリクエストまで変更を検出できません。

別のオプションは、新しいカスタムビルダーを定義し、そのビルダーに「完了時にリソースを更新する」ように指定することです。

代替テキストhttp://www.cs.lth.se/EDA180/2005/Verktyg/Eclipse_refresh.gif

2
VonC
  1. プロジェクトを右クリックし、[プロパティ]を選択します
  2. 左からJava Build Pathを選択し、[ソース]タブを選択します
  3. [フォルダの追加]をクリックします
  4. Binディレクトリを選択し、[OK]をクリックします
  5. (project/target/generated-sources/xxxx)[OK]をクリックしてプロジェクトを更新
2
Ranjith Reddy

生成されたコードの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 Con​​nector をインストールしました。リブートしてからすべてのプロジェクトを再構築した直後に、物事が機能し始めたと思います。ソースdirsに次のように表示されます。

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

特徴!

0
Gray

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 Editormarketplace link )をインストールすることをお勧めします

幸運を!

0
vlp