Android Studio - 添加.jar库

时间:2015-01-15 18:56:19

标签: android hibernate gradle android-studio build.gradle

这似乎是一个陈旧的问题,但我仍然有一些问题。 我创建了一个Web服务器,它将一些类共享为.jar。这是共享POJO类的一个示例

@JsonInclude(Include.NON_NULL)
@Entity
@Table(name = "user", uniqueConstraints =
{ @UniqueConstraint(columnNames = "email"),
    @UniqueConstraint(columnNames = "nick") })
public class User implements java.io.Serializable, RecognizedServerEntities
{
  @Id
  @GeneratedValue(strategy = IDENTITY)
  @Column(name = "id", unique = true, nullable = false)
  private Integer userId;

  @OneToMany(fetch = FetchType.LAZY, mappedBy = "threadAuthor",
      orphanRemoval = false)
  @Cascade({ CascadeType.SAVE_UPDATE })
  private Set<Thread> userThreads = new HashSet<Thread>(0);
}

现在,我正在尝试创建一个只使用这些共享类的Android应用程序:应用程序不需要了解有关hibernate或javax.persistence的任何信息(至少,我认为是这样)。 但是,当我在Android Studio中创建一个新项目时,似乎需要一些额外的库。实际上,gradle构建过程会产生许多警告,例如

warning: unknown enum constant CascadeType.REMOVE
  reason: class file for org.hibernate.annotations.CascadeType not found
warning: unknown enum constant FetchType.EAGER
  reason: class file for javax.persistence.FetchType not found

并且在运行时,应用程序崩溃并显示此日志消息

java.lang.NoClassDefFoundError: org/hibernate/annotations/Cascade

那么,我是否必须将这些.jar作为库导入,并将compile files()添加到build.gradle? 我还使用Java(Swing)开发了另一个客户端应用程序,并且不需要导入这些库:shared.jar就足够了。为什么Android需要它们?

2 个答案:

答案 0 :(得分:1)

CascadeTypeFetchType是Java EE的一部分。 尝试使用findjar下载包含这些类的jar。

即使您将下载的jar添加到类路径中,RuntimeException仍然会发生迁移,因为这些库可以使用不属于Android Java的Java部分。

试着给我们一个反馈:)

答案 1 :(得分:1)

  

现在,我正在尝试创建一个只使用这些共享类的Android应用程序:应用程序不需要了解有关hibernate或javax.persistence的任何信息(至少,我认为是这样)。

显然,确实如此。其中一些注释可能是运行时注释,在这种情况下,您需要JAR。其中一些是编译时注释可能会扩展为对这些JAR中的事物的引用,这就是我对您的错误消息的解释。

  

那么,我是否必须将这些.jars作为库导入并将build files()添加到build.gradle?

当然欢迎您尝试在Android上使用Hibernate,无论是通过JAR还是在Maven Central等地方使用工件。是否有适用于Android的Hibernate端口,我不能说。最后我检查过,Hibernate是为服务器端设计而设计的,可直接访问数据库,而Android应用程序专为客户端使用而设计,无需直接访问数据库(例如,使用Web服务)。