Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 应用程序引擎端点库-NoClassDefFind适用于my Api及其$Builder_Java_Android_Google App Engine_Maven - Fatal编程技术网

Java 应用程序引擎端点库-NoClassDefFind适用于my Api及其$Builder

Java 应用程序引擎端点库-NoClassDefFind适用于my Api及其$Builder,java,android,google-app-engine,maven,Java,Android,Google App Engine,Maven,我的api建立在App Engine Endpoints平台上,我的连接无法正常工作。在我将生成的库附加到Android客户端之后,使用它并构建一个应用程序,它总是说找不到我的Api或Api$Builder(在运行时)。它在开发代码或编译时清晰可见且可访问 我尝试了两种不同的方法: -附加maven appengine生成的.jar:endpoints\u get\u client\u lib目标 -附加由相同目标生成的这些类的源 这两种方法都使类在运行时仍然可见和可用—有一个异常NoClass

我的api建立在App Engine Endpoints平台上,我的连接无法正常工作。在我将生成的库附加到Android客户端之后,使用它并构建一个应用程序,它总是说找不到我的Api或Api$Builder(在运行时)。它在开发代码或编译时清晰可见且可访问

我尝试了两种不同的方法: -附加maven appengine生成的.jar:endpoints\u get\u client\u lib目标 -附加由相同目标生成的这些类的源

这两种方法都使类在运行时仍然可见和可用—有一个异常NoClassDefFound(当我实际调用它时)和一个错误,dalvikvm找不到该类

我已选择“订单/导出”选项卡中的引用库。尽管它处于最新位置(与任何其他产品一起试用)。我还检查了Android 5.0库以及Android私有库(未检查Android依赖项和Maven依赖项-也未检查Maven依赖项)

值得一提的是,在我使用GAE插件(没有maven)在Eclipse中创建测试项目的那一刻,它就工作得非常好。我想不出问题出在哪里

我可以提供任何你想要的信息来解决这个问题。只需在评论中询问,我就可以更新所需信息

Android应用程序MainActivity中我的部分代码:

protected TestUser callApi() throws IOException
{
    Api.Builder api = new Api.Builder(AndroidHttp.newCompatibleTransport(), new       AndroidJsonFactory(), null);
    return api.build().hello("ANY").execute();
}
我的API代码:

import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiMethod;
import com.google.api.server.spi.config.ApiNamespace;
import com.google.api.server.spi.config.Named;
import com.test.user.Contact;
import com.test.user.TestUser;
import com.test.user.status.Status;
import com.test.utils.Utils;

/** An endpoint class we are exposing */
@Api(
    name = "api", 
    version = "v1", 
    description = "My Own Api",
    namespace = @ApiNamespace(
            ownerDomain = "com.test.server", 
            ownerName = "com.test.server", 
            packagePath = ""),
    scopes = { Utils.EMAIL_SCOPE }
)
public class ApiService
{
    /**
     * Api Method for Testing purposes.
     * 
     * @param name
     * @return
     */
    @ApiMethod(name = "hello")
    public TestUser hello(@Named("name") String name)
    {
        TestUser response = new TestUser();
        response.setId(123);
        response.setName(name);

        return response;
    }
}
我的Android项目的POM:

<properties>
    <!-- use UTF-8 for everything -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <appengine.app.version>2</appengine.app.version>
    <appengine.target.version>1.9.14</appengine.target.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>4.1.1.4</version>
        <scope>provided</scope>
    </dependency>
    <!-- Compile/runtime dependencies -->
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>${appengine.target.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-endpoints</artifactId>
        <version>${appengine.target.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.api-client</groupId>
        <artifactId>google-api-client</artifactId>
        <version>1.19.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.http-client</groupId>
        <artifactId>google-http-client</artifactId>
        <version>1.19.0</version>
    </dependency>
    <dependency>
        <groupId>com.google.http-client</groupId>
        <artifactId>google-http-client-android</artifactId>
        <version>1.19.0</version>
    </dependency>
</dependencies>
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.9.0-rc.1</version>
                <configuration>
                    <sdk>
                        <platform>21</platform>
                    </sdk>
                    <deleteConflictingFiles>true</deleteConflictingFiles>
                    <undeployBeforeDeploy>true</undeployBeforeDeploy>
                </configuration>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

UTF-8
UTF-8
2.
1.9.14
UTF-8
com.google.android
安卓
4.1.1.4
假如
com.google.appengine
appengine-api-1.0-sdk
${appengine.target.version}
com.google.appengine
appengine端点
${appengine.target.version}
com.google.api-client
谷歌api客户端
1.19.0
com.google.http-client
谷歌http客户端
1.19.0
com.google.http-client
谷歌http客户端android
1.19.0
com.jayway.maven.plugins.android.generation2
安卓maven插件
3.9.0-rc.1
21
真的
真的
真的
maven编译器插件
3.1
1.6
1.6
我的API应用程序的POM:

<pluginRepositories>
    <pluginRepository>
        <id>google-staging</id>
        <name>Google Staging</name>
        <url>https://oss.sonatype.org/content/repositories/comgoogleappengine-1004/</url>
    </pluginRepository>
</pluginRepositories>

<properties>
    <appengine.app.version>1</appengine.app.version>
    <appengine.target.version>1.9.14</appengine.target.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>
    <!-- Compile/runtime dependencies -->
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>${appengine.target.version}</version>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-endpoints</artifactId>
        <version>1.9.14</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>servlet-api</artifactId>
        <version>2.5</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.jdo</groupId>
        <artifactId>jdo-api</artifactId>
        <version>3.1-rc1</version>
    </dependency>
    <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>persistence-api</artifactId>
        <version>1.0.2</version>
    </dependency>

    <dependency>
        <groupId>com.googlecode.objectify</groupId>
        <artifactId>objectify</artifactId>
        <version>5.1</version>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- Test Dependencies -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-testing</artifactId>
        <version>${appengine.target.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-stubs</artifactId>
        <version>${appengine.target.version}</version>
        <scope>test</scope>
    </dependency>
</dependencies>

<build>
    <outputDirectory>target/${project.artifactId}/WEB-INF/classes</outputDirectory>

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <archiveClasses>true</archiveClasses>
                <webResources>
                    <!-- in order to interpolate version from pom into appengine-web.xml -->
                    <resource>
                        <directory>${basedir}/src/main/webapp/WEB-INF</directory>
                        <filtering>true</filtering>
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                </webResources>
            </configuration>
        </plugin>

        <plugin>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-maven-plugin</artifactId>
            <version>1.9.14</version>
            <configuration>
                <enableJarClasses>false</enableJarClasses>
                <port>8888</port>
                <address>0.0.0.0</address>
            </configuration>
        </plugin>
    </plugins>
</build>

谷歌登台
谷歌登台
https://oss.sonatype.org/content/repositories/comgoogleappengine-1004/
1.
1.9.14
UTF-8
com.google.appengine
appengine-api-1.0-sdk
${appengine.target.version}
com.google.appengine
appengine端点
1.9.14
javax.servlet
servlet api
2.5
假如
javax.jdo
jdoapi
3.1-rc1
javax.persistence
持久性api
1.0.2
com.googlecode.objectify
客观化
5.1
jstl
jstl
1.2
朱尼特
朱尼特
4.10
测试
org.mockito
莫基托所有
1.9.0
测试
com.google.appengine
阿彭金试验
${appengine.target.version}
测试
com.google.appengine
appengine api存根
${appengine.target.version}
测试
target/${project.artifactId}/WEB-INF/classes
org.apache.maven.plugins
maven战争插件
2.3
真的
${basedir}/src/main/webapp/WEB-INF
真的
WEB-INF
com.google.appengine
appengine maven插件
1.9.14
假的
8888
0.0.0.0
编辑14:43 1.11.2014:

Android清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.test.client"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data android:name="com.google.android.gms.version"
                   android:value="@integer/abc_max_action_buttons" />
        <activity
            android:name="MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

此错误通常意味着在服务器上找不到所需的jar。您在Eclipse中没有看到错误,因为您确实将所有必需的JAR添加到了类路径中

在Eclipse中,选择您的项目并单击Problems选项卡。查看是否有任何警告说“…将无法在服务器上使用…”。右键单击此警告并选择“复制”选项

请注意,另一种可能性是,您在该文件夹中有多个所需jar副本,在这种情况下,您应该删除所有副本,添加正确的jar,并清理项目