【问题标题】:Google Apps Engine Backend - Javax.persistence missing - Android StudioGoogle Apps Engine 后端 - 缺少 Javax.persistence - Android Studio
【发布时间】:2014-04-25 22:09:50
【问题描述】:

我正在尝试迁移到 Android Studio,而我的应用引擎代码使用下面列出的实体框架

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class AppVersion {

@Id
private String applicationName;
private int minVersionRequired;

public String getApplicationName() {
    return applicationName;
}
public int getMinVersionRequired() {
    return minVersionRequired;
}
public void setApplicationName(String applicationName) {
    this.applicationName = applicationName;
}
public void setminVersionRequired(int minVersionRequired) {
    this.minVersionRequired = minVersionRequired;
}
}

仅仅在Android Studio (0.5.6) 中创建后端是行不通的,我无法导入javax.persistence.*

从这个link 我发现我需要创建一个persistence.xml 文件(这是在Eclipse 中自动创建的)。我只是无法弄清楚它应该在文件结构中的哪个位置。我知道它需要在 META-INF 文件夹中,但我不知道 gradle 对应的位置(或者是否必须在 gradle 构建文件中创建它)。 当前文件结构:

-src
  -main
    -java
      -com.package.test
        class files
    -webapp
      -css
      -js
      -WEB-INF

Gradle 构建文件:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.appengine:gradle-appengine-plugin:1.9.1'
    }
}

repositories {
    mavenCentral();
}

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'

sourceCompatibility = 1.7
targetCompatibility = 1.7

dependencies {
  appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.1'
  compile 'com.google.appengine:appengine-endpoints:1.9.1'
  compile 'com.google.appengine:appengine-endpoints-deps:1.9.1'
  compile 'javax.servlet:servlet-api:2.5'
}

appengine {
  downloadSdk = true
  appcfg {
    oauth2 = true
  }
  endpoints {
    getClientLibsOnBuild = true
    getDiscoveryDocsOnBuild = true
  }
}

【问题讨论】:

    标签: android google-app-engine gradle android-studio android-gradle-plugin


    【解决方案1】:

    Android Studio 的 App Engine 示例不使用 JPA。

    但是如果你想使用 JPA,你需要添加 JPA 依赖,这描述了你可以在哪里找到那些是 https://developers.google.com/appengine/docs/java/datastore/jpa/overview-dn2

    所以这些(或其中的一些子集)

    • asm-4.0.jar
    • datanucleus-api-jpa-3.1.3.jar
    • datanucleus-core-3.1.3.jar
    • jdo-api-3.0.1.jar
    • datanucleus-api-jdo-3.1.3.jar
    • datanucleus-appengine-2.1.2.jar
    • geronimo-jpa_2.0_spec-1.0.jar
    • jta-1.1.jar

    在 maven.org 上查看这些依赖项将揭示如何将它们作为编译依赖项包含在 build.gradle 文件中:

    asm-4.0:

    compile 'org.ow2.asm:asm:4.0'
    

    datanucleus-api-jpa-3.1.3:

    compile 'org.datanucleus:datanucleus-api-jpa:3.1.3'
    

    等等。

    您希望版本与 appengine sdk 中的版本完全相同,以确保兼容性。还要确保在项目上运行增强任务。

    【讨论】:

    • 嗯,这消除了错误,我现在给你一个赞成票,但我必须稍后测试它才能接受它。我在 Maven.org 上找不到 appengine-jsr107cache:1.1 或 jta:1.1。还有,增强任务有什么作用?
    • 您需要在 JPA/JDO 实体类上运行增强,以使它们对系统有用 (datanucleus.org/products/accessplatform_2_1/enhancer.html)。您需要在编译之后但在 WAR 之前运行它,因此类似 war.dependsOn appengineEnhance 的东西可能对您有用。
    • 我不确定 jsr 和 jta 依赖项,我想知道它们的暴露方式是否不同。旧的 maven 示例没有使用 jta,所以也许你不需要包含它,但是 jsr 缓存依赖项在这里:search.maven.org/…
    • 也许你应该试试code.google.com/p/objectify-appengine,这是一个专门为谷歌应用引擎设计的持久化框架。那么您不必运行任何其他任务。
    【解决方案2】:

    尝试将以下内容添加到 build.gradle

    compile group: 'javax.persistence', name: 'persistence-api', version: '1.0'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2013-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多