2017-05-03 83 views
1

我有一個問題,使用jooq codegen與JPADatabase。我已經通過這個post並作出相應的更改。我的項目包含子模塊,實體類位於域模塊中。我有一個依賴域的商業模塊。所以我在biz模塊的pom.xml中有這個構建配置。jooq codegen與JPADatabase不工作

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.jooq</groupId> 
      <artifactId>jooq-codegen-maven</artifactId> 
      <version>3.9.1</version> 

      <!-- The plugin should hook into the generate goal --> 
      <executions> 
       <execution> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>generate</goal> 
        </goals> 
       </execution> 
      </executions> 

      <dependencies> 
       <dependency> 
        <groupId>org.jooq</groupId> 
        <artifactId>jooq-meta-extensions</artifactId> 
        <version>3.9.1</version> 
       </dependency> 
      </dependencies> 

      <configuration> 

       <!-- Generator parameters --> 
       <generator> 

        <database> 
         <name>org.jooq.util.jpa.JPADatabase</name> 
         <properties> 
          <!-- A comma separated list of Java packages, that contain your entities --> 
          <property> 
           <key>packages</key> 
           <value>com.yaswanth.domain.entity</value> 
          </property> 
         </properties> 
        </database> 

        <target> 
         <packageName>com.yaswanth.domain.entity.jooq</packageName> 
         <directory>target/generated-sources/jooq</directory> 
        </target> 
       </generator> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

插件失敗,實體上出現ClassNotFoundException。這是堆棧跟蹤。

Caused by: org.jooq.exception.DataAccessException: Error while exporting schema 
    at org.jooq.util.jpa.JPADatabase.create0(JPADatabase.java:147) 
    at org.jooq.util.AbstractDatabase.create(AbstractDatabase.java:221) 
    at org.jooq.util.AbstractDatabase.create(AbstractDatabase.java:213) 
    at org.jooq.util.AbstractDatabase.getDialect(AbstractDatabase.java:195) 
    at org.jooq.util.AbstractGenerator.logDatabaseParameters(AbstractGenerator.java:129) 
    at org.jooq.util.JavaGenerator.generate(JavaGenerator.java:243) 
    at org.jooq.util.GenerationTool.run(GenerationTool.java:610) 
    at org.jooq.util.GenerationTool.generate(GenerationTool.java:199) 
    at org.jooq.util.maven.Plugin.execute(Plugin.java:188) 
    ... 22 more 
Caused by: java.lang.ClassNotFoundException: com.walmartlabs.sc.domain.entity.ItemNames 
    at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) 
    at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271) 
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247) 
    at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:264) 
    at org.jooq.util.jpa.JPADatabase.create0(JPADatabase.java:135) 
    ... 30 more 

域模塊類已經生成,但仍然插件說ClassNotFoundException。我正在使用jooq 3.9.1版本。誰能告訴我我在這裏做錯了什麼?

更新:盧卡斯埃德的答案是正確的答案,並接受一個。我自己對這個問題的回答對我來說很合適,因爲我在maven回購中緩存了特定的版本。我的回答是錯誤的。

+0

你把你的實體放在使用jOOQ代碼生成器的模塊的依賴關係中嗎?請參閱:http://stackoverflow.com/q/42968155/521799 –

+0

是的。域模塊是發生代碼生成的商業模塊中的依賴項。 – yaswanth

回答

1

您似乎遇到了問題#5845,該問題已修復爲3.00版,計劃爲3.9.3和3.8.8。

現在最好的解決方法是使用jooq-meta-extensions依賴關係的GitHub版本(3.10-SNAPSHOT):https://github.com/jOOQ/jOOQ/tree/master/jOOQ-meta-extensions,或者相應地修補您的版本。

+0

如果我降級到3.8.0會有幫助嗎? – yaswanth

+0

@yaswanth:不,爲什麼?這不是迴歸。自從JPADatabase第一次實現以來,這個問題一直存在。 –

+0

我認爲類加載器問題是一個在更高版本中開始出現的錯誤。 – yaswanth

1

正在關注@Lukas Eder的回答,我嘗試了#5845的建議。以下構建配置有效。

<build> 
    <plugins> 
    <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <configuration> 
      <source>1.8</source> 
      <target>1.8</target> 
     </configuration> 
    </plugin> 

    <plugin> 
     <groupId>org.jooq</groupId> 
     <artifactId>jooq-codegen-maven</artifactId> 
     <version>3.9.1</version> 

     <!-- The plugin should hook into the generate goal --> 
     <executions> 
      <execution> 
       <phase>generate-sources</phase> 
       <goals> 
        <goal>generate</goal> 
       </goals> 
      </execution> 
     </executions> 

     <dependencies> 
      <dependency> 
       <groupId>org.jooq</groupId> 
       <artifactId>jooq-meta-extensions</artifactId> 
       <version>3.9.1</version> 
      </dependency> 

      <!-- 

       This needs to be the dependency where the entity classes reside. 
       In my case, it is in the same module as the build profile is present. 
       Hence the version is ${project.version} 
      --> 
      <dependency> 
       <groupId>com.yaswanth</groupId> 
       <artifactId>domain</artifactId> 
       <version>${project.version}</version> 
      </dependency> 
     </dependencies> 
     <configuration> 

      <!-- Generator parameters --> 
      <generator> 

       <database> 
        <name>org.jooq.util.jpa.JPADatabase</name> 
        <properties> 
         <!-- A comma separated list of Java packages, that contain your entities --> 
         <property> 
          <key>packages</key> 
          <value>com.yaswanth.domain.entity</value> 
         </property> 
        </properties> 
       </database> 

       <target> 
        <packageName>com.yaswanth.domain.entity.jooq</packageName> 
        <directory>target/generated-sources/jooq</directory> 
       </target> 
      </generator> 
     </configuration> 
    </plugin> 
</plugins> 

有關此配置奇怪的是,我包括模塊作爲一個插件在它自己的POM的建造輪廓的依賴!