我的問題很簡單。 鑑於以下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依賴項時,增強功能正常工作。當然,日誌文件不會再更新,但是這些類會增強。
任何有關上述行爲的想法將不勝感激。
你是什麼意思「查詢」?你正在增強你的課程。而且你正在用一種版本的datanucleus-api-jdo(3.0.2)進行增強,但是由增強器引入的datanucleus-core(可能是3.0.10)版本不一致。 – DataNucleus
我不清楚爲什麼你說我使用datanucleus-api-jdo 3.0.2和datanucleus-core 3.0.10,因爲在我的POM中,後者的版本是3.0.2。也許你指的是插件版本(3.0.0)。我試圖改變,但沒有成功。通過「查詢」我的意思是,除了增強類之外,在控制檯中查看發佈到數據庫的查詢(就像Hibernate一樣)將是很酷的。 –
我指的是增強器使用的是什麼,DataNucleus M2插件正在拉入。使用「--debug」運行maven會證實這一點或其他。事實上你只會得到那個例外是使用相互不一致的jar版本。你的錯誤是在增強,所以你甚至還沒有開始PMF/EMF,因此沒有查詢......一次一件事 – DataNucleus