2012-04-30 50 views
0

我的問題很簡單。 鑑於以下POM:如何爲基於Maven的Datanucleus應用程序啓用日誌記錄?

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.datanucleus</groupId> 
      <artifactId>maven-datanucleus-plugin</artifactId> 
      <version>3.0.0-release</version> 
      <configuration> 
       <log4jConfiguration>${basedir}/src/main/resources/log4j.properties</log4jConfiguration> 
       <verbose>true</verbose> 
       <props>${basedir}/src/main/resources/datanucleus.properties</props> 
      </configuration> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <goals> 
         <goal>enhance</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
<repositories> 
    <repository> 
     <id>DataNucleus_Repos2</id> 
     <name>DataNucleus Repository</name> 
     <url>http://www.datanucleus.org/downloads/maven2</url> 
    </repository> 
    <repository> <!-- Required for transaction-api transitive dep --> 
     <id>Java_Net_LEGACY</id> 
     <name>Java.Net legacy</name> 
     <url>http://download.java.net/maven/1/</url> 
     <layout>legacy</layout> 
    </repository> 
</repositories> 
<pluginRepositories> 
    <pluginRepository> 
     <id>DataNucleus_2</id> 
     <url>http://www.datanucleus.org/downloads/maven2/</url> 
    </pluginRepository> 
</pluginRepositories> 

<dependencies> 
    <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-core</artifactId> 
     <scope>runtime</scope> 
     <version>3.0.2</version> 
    </dependency> 
    <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-api-jdo</artifactId> 
     <version>3.0.2</version> 
    </dependency>   
    <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
     </dependency> 
    <dependency> 
     <groupId>org.datanucleus</groupId> 
     <artifactId>datanucleus-rdbms</artifactId> 
     <version>3.0.2</version> 
    </dependency> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.9</version> 
     </dependency> 
    <dependency> 
     <groupId>javax.jdo</groupId> 
     <artifactId>jdo-api</artifactId> 
     <version>3.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.geronimo.specs</groupId> 
     <artifactId>geronimo-jpa_2.0_spec</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.18</version> 
     </dependency> 
</dependencies> 

的,而且是我在他們預期的地方文件log4j.properties和datanucleus.properties,當我運行

mvn compile 

我得到(從datanucleus.log取文件)

19:36:11,297 (main) ERROR [DataNucleus.Enhancer] - DataNucleus Enhancer completed with an error. Please review the enhancer log for full details. Some classes may have been enhanced but some caused errors Error creating the MetaDataManager for API "JDO" : org.datanucleus.exceptions.NucleusException: Error creating the MetaDataManager for API "JDO" : at org.datanucleus.NucleusContext.getMetaDataManager(NucleusContext.java:964) at org.datanucleus.enhancer.DataNucleusEnhancer.getMetaDataManager(DataNucleusEnhancer.java:261) at org.datanucleus.enhancer.DataNucleusEnhancer.getFileMetadataForInput(DataNucleusEnhancer.java:716) at org.datanucleus.enhancer.DataNucleusEnhancer.enhance(DataNucleusEnhancer.java:590) at org.datanucleus.enhancer.DataNucleusEnhancer.main(DataNucleusEnhancer.java:1390)

Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at org.datanucleus.plugin.NonManagedPluginRegistry.createExecutableExtension(NonManagedPluginRegistry.java:681) at org.datanucleus.plugin.PluginManager.createExecutableExtension(PluginManager.java:314) at org.datanucleus.NucleusContext.getMetaDataManager(NucleusContext.java:958) ... 4 more

Caused by: java.lang.NoSuchFieldError: supportsORM at org.datanucleus.api.jdo.metadata.JDOMetaDataManager.(JDOMetaDataManager.java:142) ... 11 more

我想啓用日誌記錄來查看我的應用程序正在完成哪些查詢。 需要注意的一點是,當從POM中刪除log4j依賴項時,增強功能正常工作。當然,日誌文件不會再更新,但是這些類會增強。

任何有關上述行爲的想法將不勝感激。

+0

你是什麼意思「查詢」?你正在增強你的課程。而且你正在用一種版本的datanucleus-api-jdo(3.0.2)進行增強,但是由增強器引入的datanucleus-core(可能是3.0.10)版本不一致。 – DataNucleus

+0

我不清楚爲什麼你說我使用datanucleus-api-jdo 3.0.2和datanucleus-core 3.0.10,因爲在我的POM中,後者的版本是3.0.2。也許你指的是插件版本(3.0.0)。我試圖改變,但沒有成功。通過「查詢」我的意思是,除了增強類之外,在控制檯中查看發佈到數據庫的查詢(就像Hibernate一樣)將是很酷的。 –

+0

我指的是增強器使用的是什麼,DataNucleus M2插件正在拉入。使用「--debug」運行maven會證實這一點或其他。事實上你只會得到那個例外是使用相互不一致的jar版本。你的錯誤是在增強,所以你甚至還沒有開始PMF/EMF,因此沒有查詢......一次一件事 – DataNucleus

回答

0

的文檔給不同的外觀配置的在執行中特定插件:

<executions> 
    <execution> 
    <phase>process-classes</phase> 
    <goals> 
     <goal>enhance</goal> 
    </goals> 
    </execution> 
</executions> 

可能很多問題。此外,你應該從你的pom中刪除存儲庫定義,基於一個簡短的檢查,通過maven central提供所有這些依賴關係。如果您確實需要配置存儲庫,則應該使用存儲庫管理器。

+0

感謝您的答案!你對插件的配置是正確的,我先改變了它,現在恢復了這些改變。我也評論了倉庫定義,它似乎在datanucleus.log文件中引發了相同的錯誤。我會繼續調查這一點。 –

相關問題