所以直到最近我才开发了一个带有Eclipse服务器组件的Android应用程序;依赖管理是用Maven完成的。我现在想尝试转移到Android Studio(最新版本的工作室和SDK)。
在Eclipse中,我有3个项目:一个服务器项目(用于Tomcat; Apache Jersey,Jackson和Hibernate),一个包含模型类的“常见”项目,以及用于App的Android项目。 Android项目引用了“常见”项目,因此我可以将该模型与Android应用程序中的Jackson Annotations一起使用。这一切都很完美。
现在我将Android项目导入Android Studio并简化了依赖项。 “common”项目成为了一个本地Maven模块,我将其包含在新Android项目的build.gradle中。这是build.gradle:
...
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'com.android.support:support-v4:22.2.0'
compile 'com.google.android.gms:play-services:8.3.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'at.schulupdate:schulupdate-common:0.0.1-SNAPSHOT'
compile 'com.joanzapata.android:android-iconify:1.0.9'
compile 'uk.co.chrisjenx:calligraphy:1.1.0'
compile 'commons-io:commons-io:2.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.4.2'
}
“普通”项目的POM如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>at.schulupdate</groupId>
<artifactId>schulupdate-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.6.Final</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate4</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-jstlel</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
</dependencies>
</project>
gradle依赖项显示:
compile - Classpath for compiling the main sources.
+--- project :viewpagerindicator
| \--- com.android.support:support-v4:22.2.0
| \--- com.android.support:support-annotations:22.2.0
+--- com.android.support:support-v4:22.2.0 (*)
+--- com.google.android.gms:play-services:8.3.0
| +--- com.google.android.gms:play-services-ads:8.3.0
| | \--- com.google.android.gms:play-services-basement:8.3.0
| | \--- com.android.support:support-v4:22.2.0 (*)
| +--- com.google.android.gms:play-services-analytics:8.3.0
| | \--- com.google.android.gms:play-services-basement:8.3.0 (*)
| +--- com.google.android.gms:play-services-appindexing:8.3.0
| | \--- com.google.android.gms:play-services-basement:8.3.0 (*)
| +--- com.google.android.gms:play-services-appinvite:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0
| | \--- com.google.android.gms:play-services-basement:8.3.0 (*)
| +--- com.google.android.gms:play-services-appstate:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-auth:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-basement:8.3.0 (*)
| +--- com.google.android.gms:play-services-cast:8.3.0
| | +--- com.google.android.gms:play-services-base:8.3.0 (*)
| | \--- com.android.support:mediarouter-v7:22.2.0
| | \--- com.android.support:appcompat-v7:22.2.0
| | \--- com.android.support:support-v4:22.2.0 (*)
| +--- com.google.android.gms:play-services-drive:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-fitness:8.3.0
| | +--- com.google.android.gms:play-services-base:8.3.0 (*)
| | \--- com.google.android.gms:play-services-location:8.3.0
| | +--- com.google.android.gms:play-services-base:8.3.0 (*)
| | \--- com.google.android.gms:play-services-maps:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-games:8.3.0
| | +--- com.google.android.gms:play-services-base:8.3.0 (*)
| | \--- com.google.android.gms:play-services-drive:8.3.0 (*)
| +--- com.google.android.gms:play-services-gcm:8.3.0
| | +--- com.google.android.gms:play-services-base:8.3.0 (*)
| | \--- com.google.android.gms:play-services-measurement:8.3.0
| | \--- com.google.android.gms:play-services-basement:8.3.0 (*)
| +--- com.google.android.gms:play-services-identity:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-location:8.3.0 (*)
| +--- com.google.android.gms:play-services-maps:8.3.0 (*)
| +--- com.google.android.gms:play-services-measurement:8.3.0 (*)
| +--- com.google.android.gms:play-services-nearby:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-panorama:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-plus:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-safetynet:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-vision:8.3.0
| | \--- com.google.android.gms:play-services-base:8.3.0 (*)
| +--- com.google.android.gms:play-services-wallet:8.3.0
| | +--- com.google.android.gms:play-services-base:8.3.0 (*)
| | +--- com.google.android.gms:play-services-identity:8.3.0 (*)
| | \--- com.google.android.gms:play-services-maps:8.3.0 (*)
| \--- com.google.android.gms:play-services-wearable:8.3.0
| \--- com.google.android.gms:play-services-base:8.3.0 (*)
+--- com.android.support:appcompat-v7:22.2.0 (*)
+--- at.schulupdate:schulupdate-common:0.0.1-SNAPSHOT
| +--- org.hibernate:hibernate-entitymanager:4.3.6.Final
| | +--- org.jboss.logging:jboss-logging:3.1.3.GA
| | +--- org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1
| | +--- org.hibernate:hibernate-core:4.3.6.Final
| | | +--- org.jboss.logging:jboss-logging:3.1.3.GA
| | | +--- org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1
| | | +--- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final
| | | +--- dom4j:dom4j:1.6.1
| | | | \--- xml-apis:xml-apis:1.0.b2
| | | +--- org.hibernate.common:hibernate-commons-annotations:4.0.5.Final
| | | | +--- org.jboss.logging:jboss-logging:3.1.3.GA
| | | | \--- org.jboss.logging:jboss-logging-annotations:1.2.0.Beta1
| | | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final
| | | +--- org.javassist:javassist:3.18.1-GA
| | | +--- antlr:antlr:2.7.7
| | | \--- org.jboss:jandex:1.1.0.Final
| | +--- dom4j:dom4j:1.6.1 (*)
| | +--- org.hibernate.common:hibernate-commons-annotations:4.0.5.Final (*)
| | +--- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final
| | +--- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final
| | \--- org.javassist:javassist:3.18.1-GA
| +--- com.fasterxml.jackson.datatype:jackson-datatype-hibernate4:2.4.2
| | +--- com.fasterxml.jackson.core:jackson-databind:2.4.2
| | | +--- com.fasterxml.jackson.core:jackson-annotations:2.4.0 -> 2.4.2
| | | \--- com.fasterxml.jackson.core:jackson-core:2.4.2
| | \--- com.fasterxml.jackson.core:jackson-core:2.4.2
| +--- com.fasterxml.jackson.core:jackson-annotations:2.4.2
| +--- org.apache.taglibs:taglibs-standard-jstlel:1.2.1
| | +--- org.apache.taglibs:taglibs-standard-spec:1.2.1
| | \--- org.apache.taglibs:taglibs-standard-impl:1.2.1
| +--- org.apache.commons:commons-lang3:3.3.2
| \--- javax.validation:validation-api:1.1.0.Final
+--- com.joanzapata.android:android-iconify:1.0.9
+--- uk.co.chrisjenx:calligraphy:1.1.0
+--- commons-io:commons-io:2.4
\--- com.fasterxml.jackson.core:jackson-databind:2.4.2 (*)
Android Studio中的gradle构建成功!但是当我想将它部署到设备时,我收到以下错误:
:schulupdate:transformClassesWithDexForDebug故障处理 “的javax /交易/ Status.class”:
错误使用或错误使用核心类(java。*或javax。*)时 没有建立核心库。
这通常是由于无意中包含了一个核心库文件 应用程序的项目,使用IDE(例如Eclipse)时。如果 你确定你不是故意定义一个核心类,那么这个 是最有可能解释发生了什么。
但是,您实际上可能正在尝试在核心中定义类 命名空间,例如,来自a的源代码 非Android虚拟机项目。这肯定不会 工作。它至少会危害您的应用与您的兼容性 该平台的未来版本。它也常常值得怀疑 合法性。
如果你真的打算建立一个核心库 - 这只是 适合作为创建完整虚拟机分发的一部分, 而不是编译应用程序 - 然后使用 “--core-library”选项可以禁止显示此错误消息。
如果你继续使用“--core-library”但实际上正在构建一个 应用程序,然后预先警告您的应用程序仍将失败 在某些时候建立或运行。请为愤怒的顾客做好准备 例如,谁发现你的申请不再运作一次 他们升级他们的操作系统。你应该为此负责 问题
如果您合法地使用恰好位于核心中的某些代码 包装,那么最简单的安全替代方案就是重新包装 那段代码。也就是说,将有问题的类移动到您自己的包中 命名空间。这意味着它们永远不会与核心发生冲突 系统类。 JarJar是一个可以帮助您完成这项工作的工具。 如果你发现你不能这样做,那就表明了这一点 你所走的道路最终将导致痛苦,痛苦,悲伤, 和悲伤。
1错误;中止
现在我明白我的“常见”项目包括传递依赖项,如org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:1.0.0.Final,它们定义了javax.transaction命名空间中的类。但我真的不明白如何解决这个问题。我仍然需要设备上的那个包的代码,对吗?它根本不是核心软件包,所以它肯定不包含在Android设备上。我应该将我的“共同”项目定义为核心库吗?
答案 0 :(得分:0)
最终我自己找到了解决方案。由于Hibernate在Android上不可用,我需要排除这种依赖:
dependencies {
compile 'com.android.support:support-v4:22.2.0'
compile 'com.google.android.gms:play-services:8.3.0'
compile 'com.android.support:appcompat-v7:22.2.0'
compile('at.schulupdate:schulupdate-common:0.0.1-SNAPSHOT') {
exclude group: 'org.hibernate'
}
compile 'com.joanzapata.android:android-iconify:1.0.9'
compile 'uk.co.chrisjenx:calligraphy:1.1.0'
compile 'commons-io:commons-io:2.4'
compile 'com.fasterxml.jackson.core:jackson-databind:2.4.2'
}