Java 未找到appengine、JDO 3.0和maven中的com.google.appengine.datanucleus.DatastoreManager类错误
尝试用代码启动appengine devserver时出现此错误: (命令为appengine-java-sdk-1.8.1.1/bin/dev_appserver.sh target/myapp/) 信息:捕获并报告了异常。信息: org.datanucleus.exceptions.ClassNotResolvedException:类 在中找不到“com.google.appengine.datanucleus.DatastoreManager” 类路径。请检查您的规范和类路径。 javax.jdo.JDOFatalInternalException:类 在中找不到“com.google.appengine.datanucleus.DatastoreManager” 类路径。请检查您的规范和类路径 我正在使用Guice,因此我的模块如下所示:Java 未找到appengine、JDO 3.0和maven中的com.google.appengine.datanucleus.DatastoreManager类错误,java,google-app-engine,maven,guice,jdo,Java,Google App Engine,Maven,Guice,Jdo,尝试用代码启动appengine devserver时出现此错误: (命令为appengine-java-sdk-1.8.1.1/bin/dev_appserver.sh target/myapp/) 信息:捕获并报告了异常。信息: org.datanucleus.exceptions.ClassNotResolvedException:类 在中找不到“com.google.appengine.datanucleus.DatastoreManager” 类路径。请检查您的规范和类路径。 java
public class MyModule extends ServletModule {
@Override
public void configureServlets() {
bind(PersistenceManagerFactory.class)
.toInstance(JDOHelper.getPersistenceManagerFactory("transactions-optional"));
// ...
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<com.google.inject.version>3.0</com.google.inject.version>
<com.sun.jersey.version>1.17.1</com.sun.jersey.version>
<org.codehaus.jackson.version>1.9.12</org.codehaus.jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.appengine.orm</groupId>
<artifactId>datanucleus-appengine</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-labs</artifactId>
<version>1.8.1.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0.1</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${com.google.inject.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>${com.google.inject.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${com.sun.jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${com.sun.jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<version>${com.sun.jersey.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${org.codehaus.jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>${org.codehaus.jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${org.codehaus.jackson.version}</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jdo</artifactId>
<version>[3.2.0, 3.2.99)</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>[3.2.0, 3.2.99)</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-jdo-query</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>0.61</version>
</dependency>
<dependency>
<groupId>javax.jdo</groupId>
<artifactId>jdo-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-maven-plugin</artifactId>
<version>3.2.0-release</version>
<configuration>
<api>JDO</api>
<props>${basedir}/datanucleus.properties</props>
<!-- <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> -->
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
在代码的其他地方,我注入了PersistenceManagerFactory并定义了一些简单的持久性注释,这是目前为止我对JDO的唯一引用
我的WEB-INF/jdoconfig.xml几乎就是appengine页面的复制/粘贴:
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig
xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.api.jdo.JDOPersistenceManagerFactory" />
<property name="javax.jdo.option.ConnectionURL" value="appengine" />
<property name="javax.jdo.option.NontransactionalRead" value="true" />
<property name="javax.jdo.option.NontransactionalWrite" value="true" />
<property name="javax.jdo.option.RetainValues" value="true" />
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true" />
<property name="datanucleus.appengine.singletonPMFForName" value="true" />
</persistence-manager-factory>
</jdoconfig>
DatastoreManager应该在类路径上,但我怀疑我的依赖项可能有问题。我的maven pom文件依赖项如下所示:
public class MyModule extends ServletModule {
@Override
public void configureServlets() {
bind(PersistenceManagerFactory.class)
.toInstance(JDOHelper.getPersistenceManagerFactory("transactions-optional"));
// ...
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<com.google.inject.version>3.0</com.google.inject.version>
<com.sun.jersey.version>1.17.1</com.sun.jersey.version>
<org.codehaus.jackson.version>1.9.12</org.codehaus.jackson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.google.appengine.orm</groupId>
<artifactId>datanucleus-appengine</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-labs</artifactId>
<version>1.8.1.1</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>14.0.1</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>${com.google.inject.version}</version>
</dependency>
<dependency>
<groupId>com.google.inject.extensions</groupId>
<artifactId>guice-servlet</artifactId>
<version>${com.google.inject.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${com.sun.jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${com.sun.jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-guice</artifactId>
<version>${com.sun.jersey.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>${org.codehaus.jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-jaxrs</artifactId>
<version>${org.codehaus.jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${org.codehaus.jackson.version}</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-api-jdo</artifactId>
<version>[3.2.0, 3.2.99)</version>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-core</artifactId>
<version>[3.2.0, 3.2.99)</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-jdo-query</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>0.61</version>
</dependency>
<dependency>
<groupId>javax.jdo</groupId>
<artifactId>jdo-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.13</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.datanucleus</groupId>
<artifactId>datanucleus-maven-plugin</artifactId>
<version>3.2.0-release</version>
<configuration>
<api>JDO</api>
<props>${basedir}/datanucleus.properties</props>
<!-- <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> -->
<verbose>true</verbose>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>enhance</goal>
</goals>
</execution>
</executions>
</plugin>
1.7
1.7
3
1.17.1
1.9.12
com.google.appengine.orm
datanucleus appengine
2.1.2
com.google.appengine
阿彭金api实验室
1.8.1.1
番石榴
番石榴
14.0.1
com.google.inject
圭斯
${com.google.inject.version}
com.google.inject.extensions
guice servlet
${com.google.inject.version}
泽西岛
泽西json
${com.sun.jersey.version}
泽西岛
泽西服务器
${com.sun.jersey.version}
com.sun.jersey.contribs
泽西基斯
${com.sun.jersey.version}
公地郎
公地郎
2.6
org.codehaus.jackson
jackson core asl
${org.codehaus.jackson.version}
org.codehaus.jackson
杰克逊·贾克斯
${org.codehaus.jackson.version}
org.codehaus.jackson
杰克逊地图绘制者
${org.codehaus.jackson.version}
org.datanucleus
datanucleus api jdo
[3.2.0, 3.2.99)
org.datanucleus
数据核核心
[3.2.0, 3.2.99)
运行时
org.datanucleus
datanucleus jdo查询
3.0.2
javax.cache
缓存api
0.61
javax.jdo
jdoapi
3.0.1
javax.servlet
servlet api
2.5
假如
javax.servlet
jstl
1.2
假如
javax.servlet.jsp
jsp api
2.2
假如
org.slf4j
slf4j api
1.7.5
回写
回归经典
1.0.13
${project.artifactId}
org.datanucleus
datanucleus maven插件
3.2.0-发布
JDO
${basedir}/datanucleus.properties
符合事实的
进程类
增强
我肯定我错过了一些明显的错误,但作为appengine和JDO的新手,我现在迷路了。我遇到了一个类似的“ClassNotFound”异常,即使我使用的类在同一个包中……为什么不回到最初的Google appengine SDK,看看“datanucleus…”它为您打包的jar?它们不是v3.2.x。这是否是您的问题的根源尚不清楚,但不建议只是离开并覆盖为您设置的内容