33

プロジェクトのソースで注釈プロセッサを実行する必要があります。アノテーション プロセッサはプロジェクトの推移的な依存関係になるべきではありません。これは、アノテーション処理にのみ必要であり、他には何も必要ないためです。

これは、私がこれに使用する完全な (動作していない) テスト pom です。

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>test</groupId>
  <artifactId>test</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>Test annotations</name>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hibernate-jpamodelgen.version>1.2.0.Final</hibernate-jpamodelgen.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.0</version>
        <configuration>
          <annotationProcessors>
            <annotationProcessor>
              org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</annotationProcessor>
          </annotationProcessors>
          <debug>true</debug>
          <optimize>true</optimize>
          <source>1.6</source>
          <target>1.6</target>
          <compilerArguments>
            <AaddGeneratedAnnotation>true</AaddGeneratedAnnotation>
            <Adebug>true</Adebug>
          </compilerArguments>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-jpamodelgen</artifactId>
            <version>${hibernate-jpamodelgen.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>

テスト用のプラグイン構成で注釈プロセッサとして明示的に定義org.hibernate.jpamodelgen.JPAMetaModelEntityProcessorしましたが、それが必要ないことはわかっています。

私が遭遇している問題は、hibernate-jpamodelgen依存関係がコンパイラのクラスパスに追加されていないため、注釈プロセッサが見つからず、ビルドが失敗することです。

この答えに従って、依存関係をビルド拡張機能として追加しようとしました(それらが何をすべきかを理解していません!)次のように:

<extensions>
  <extension>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-jpamodelgen</artifactId>
    <version>${hibernate-jpamodelgen.version}</version>
  </extension>
</extensions>

hibernate-jpamodelgenこれは、コンパイラのクラスパスにも追加されません。

<dependencies>これまでのところ機能することがわかった唯一のことは、セクションのプロジェクトに依存関係を追加することです。これには、後で推移的な依存関係として追加するという不幸な副作用があり、これはhibernate-jpamodelgen避けたいと思います。

私の以前の作業セットアップでは、maven-processor-pluginプラグインを使用して目的を達成しました。ただし、このプラグインは eclipse m2e ではサポートされておらず、最新バージョンの の最新バージョンではmaven-compiler-plugin複数のコンパイラ引数が適切に処理されるため、後者を使用することをお勧めします。

4

7 に答える 7

26

依存関係をオプションの依存関係として追加します( <optional>true</optional>)。これにより、コンパイル時に依存関係が追加されますが、推移的な依存関係になることはありません。

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-jpamodelgen</artifactId>
  <version>${hibernate-jpamodelgen.version}</version>
  <optional>true</optional>
</dependency>

すべての依存関係 (.war など) を含むこのモジュールでアーティファクトを作成する場合は、<scope>provided</scope>代わりに を使用できます。これにより、依存関係が推移的になり、モジュールが生成するアーティファクトに含まれることが防止されます。

于 2013-01-14T16:53:59.317 に答える
4

jpa-metamodels-with-maven をご覧ください

さらなる訪問者のために、maven-compiler-plugin 3.x シリーズにいくつかの重要な変更があることを発見しました。

これが私がこれを行う方法です。(私はあなたがリンクした人です)

要点は、私のソリューションはこれらの 3.x シリーズの maven-compiler-plugin では機能しないということです。

<project ...>

  <build>

    <extensions>
      <extension>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-jpamodelgen</artifactId>
        <version>1.3.0.Final</version>
      </extension>
    </extensions>

    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.5.1</version> <!-- See this? -->
      </plugin>
    </plugins>

  </build>
</project>
于 2013-09-23T07:01:54.947 に答える
2

どのようなビルド エラーが発生したかはわかりませんが、私の場合は次のとおりです。 Idea で次のコンパイル エラーが発生しました。 Annotation processor 'org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor' not found error

しかし、Maven からコンパイルすると、すべて問題ありませんでした。

だから、私の問題は、アイデアの設定でどういうわけか間違った設定をしたことでした。特に、Idea はどうにかしてプロセッサを検出し、モジュール プロセッサ プロファイルの設定を行ったようです。ここで議論されています。

次のように修正しました。

  1. [アイデア] > [設定] > [注釈プロセッサ] に移動します。
  2. 各プロセッサ プロファイルについて、次のことを確認してください。
    • 注釈処理を有効にするははいです。
    • 右側のリストには、エラーが発生しているアノテーション プロセッサの FQ 名 (ei "JPAMetaModelEntityProcessor") はありません。そこにリストされている場合は、選択して「-」マイナスボタンをクリックして削除します。
于 2015-07-03T12:51:20.937 に答える
-1

このような問題を解決するために、プロファイルにそのような依存関係を含めるには、これがより良い方法だと思います。

<profile>
    <id>XXX-profile</id>
    <dependencies>
         <dependency>
             // XXX artifact path
         </dependency>
    </dependencies>
</profile>
于 2015-09-18T15:11:40.517 に答える