2017-06-24 10 views
1

        http://docs.jboss.org/hibernate/stable/jpamodelgen/reference/en-US/html_single/に従ってHibernate JPA 2メタモデルジェネレーターを学んだとき、正常に機能しています。
        mvn compileを実行してこれらのメタモデルを生成しようとすると、以下のように対応するクラスと奇妙なフォルダ 'generated-sources'がターゲットフォルダに生成され、対応するjavaファイルがソースフォルダに生成されませんでした。以下は enter image description hereHibernate JPA 2 Metamodel Generatorの使い方は?

のpom.xmlに私の関連する構成である。

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.1</version> 
    <configuration> 
     <source>1.8</source> 
     <target>1.8</target> 
     <compilerArgument>-proc:none</compilerArgument> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <version>3.2.0</version> 
    <executions> 
     <execution> 
       <id>process</id> 
      <goals> 
       <goal>process</goal> 
      </goals> 
      <phase>generate-sources</phase> 
      <configuration> 
       <processors> 
        <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> 
       </processors> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
</plugins> 


       だから、私の質問はです:この予想される動作はありますか?はいの場合は、毎回メタモデルを使用する前にコードをコンパイルする必要がありますか?いいえ、どうすればソースコードフォルダにJavaファイルを生成できますか?

ありがとうございます。

答えて

2

しかし、mvnコンパイルを実行してこれらのメタモデルを生成しようとすると、以下のように対応するクラスと奇妙なフォルダ 'generated-sources'がターゲットフォルダに生成され、対応するjavaファイルがソースフォルダに生成されません。 ${project.build.directory}はデフォルトでtargetです

生成したメタクラスのデフォルトのフォルダは${project.build.directory}/generated-sources/aptです。だから、生成されたメタクラスはtarget/generated-sources/aptディレクトリの下にあるはずです(あなたのスクリーンショットから推測できるように、メタクラスが生成されています)。

あなたはこの動作を変更したい場合は、次のようにoutputDirectory要素を使用して別のフォルダにメタクラスを生成するプラグインを設定できます。

<plugin> 
    <groupId>org.bsc.maven</groupId> 
    <artifactId>maven-processor-plugin</artifactId> 
    <version>3.2.0</version> 
    <executions> 
     <execution> 
      <id>process</id> 
     <goals> 
      <goal>process</goal> 
     </goals> 
     <phase>generate-sources</phase> 
     <configuration> 
      <processors> 
       <processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor> 
      </processors> 
      <outputDirectory>${project.basedir}/generated</outputDirectory> 
     </configuration> 
    </execution> 
</executions> 

そして追加することを忘れないでください新しいフォルダをクラスパスに追加します。そうしないと、プロジェクトが構築されない可能性があります。

この動作は期待されていますか?

はい

そうなら、それは私がメタモデルを毎回使用する前に、コードをコンパイルする必要があることを意味するのでしょうか?

はい、ただし、新しいエンティティを変更したり追加したりしない場合は、mvn compileを少なくとも1回実行して、生成されたクラスを使用できます。

もしそうでなければ、ソースコードフォルダにどのようにJavaファイルを生成できますか?

私はそれをすることをお勧めしません:-)私はソースコードと生成されたクラスを混在させることは良い考えではありません。 targetフォルダーが気に入らない場合は、上記のように他のフォルダーを使用してください。

+0

メタクラスは実際にはtarget/generated-sources/aptで生成されます。しかし、それらもtarget/classesフォルダに生成されます。つまり、同じメタクラスが2つのフォルダに生成されます。それは期待される行動ですか? – Xiaoyuan

+0

あなたが投稿していないものを持っていない限り、それはあなたが投稿した設定に従ってはいけません。しかし、コンパイルされたクラスは 'target/classes'の下になければなりません。 * MyEntity_.java *のようなソースクラスは 'generated-sources'フォルダに移動しますが、* MyEntity_.class *のようなコンパイルされたクラスは' target/classes'フォルダの下にあります。 – ujulu

+0

お返事ありがとうございます。本当に役に立ちます。 – Xiaoyuan