Lau*_*Lau 12 java android module gradle android-studio
我的项目开始很大,所以我决定把它拆分成独立的模块 - gui和domain.我的domain模块一定不知道它是Android项目的一部分,所以我创建了java-library模块并在那里放了一些类.它就像一个魅力,但是当我在我的java-library模块中添加一些其他依赖项(如RxJava)时会出现问题.我创建了一个Main类来简单地测试我的代码.构建传递,但是当它尝试调用RxJava类时,它会因异常而崩溃:
Exception in thread "main" java.lang.NoClassDefFoundError: io/reactivex/Observable
at com.example.domain.Main.main(Main.java:13)
Caused by: java.lang.ClassNotFoundException: io.reactivex.Observable
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Run Code Online (Sandbox Code Playgroud)
我的主要课程:
package com.example.domain;
import io.reactivex.Observable;
public class Main {
public static void main(String[] args) {
Observable.just(1)
.subscribe(integer -> System.out.println(integer));
}
}
Run Code Online (Sandbox Code Playgroud)
我的build.gradle档案:
apply plugin: 'java-library'
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
api 'io.reactivex.rxjava2:rxjava:2.1.2'
}
sourceCompatibility = "1.8"
targetCompatibility = "1.8"
Run Code Online (Sandbox Code Playgroud)
1)如果我使用com.android.library它而是有效
2)如果我将RxJava库添加为.jar文件,则不会更改任何内容
我查看了Domain.iml文件,发现了一些奇怪的东西:
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":Domain" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":Domain" />
</configuration>
</facet>
<facet type="java-gradle" name="Java-Gradle">
<configuration>
<option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
<option name="BUILDABLE" value="true" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/build/classes/java/main" />
<output-test url="file://$MODULE_DIR$/build/classes/java/test" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" scope="PROVIDED" name="rxjava-2.1.2" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="reactive-streams-1.0.0" level="project" />
</component>
</module>
Run Code Online (Sandbox Code Playgroud)
奇怪的部分是节点中的scope属性orderEntry
<orderEntry type="library" exported="" scope="PROVIDED" name="rxjava-2.1.2" level="project" />
<orderEntry type="library" exported="" scope="PROVIDED" name="reactive-streams-1.0.0" level="project" />
Run Code Online (Sandbox Code Playgroud)
如果我手动删除它:
<orderEntry type="library" exported="" name="rxjava-2.1.2" level="project" />
<orderEntry type="library" exported="" name="reactive-streams-1.0.0" level="project" />
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.
不幸的是,如果我同步我的build.gradle文件,它会覆盖我的修改.
如何使它永久工作,为什么这样做?
小智 0
奇怪的部分是 orderEntry 节点中的范围属性
Run Code Online (Sandbox Code Playgroud)<orderEntry type="library" exported="" scope="PROVIDED" name="rxjava-2.1.2" level="project" /> <orderEntry type="library" exported="" scope="PROVIDED" name="reactive-streams-1.0.0" level="project" />如果我手动删除它:
Run Code Online (Sandbox Code Playgroud)<orderEntry type="library" exported="" name="rxjava-2.1.2" level="project" /> <orderEntry type="library" exported="" name="reactive-streams-1.0.0" level="project" />它就像一个魅力。
不幸的是,如果我同步我的 build.gradle 文件,它会覆盖我的修改。
您是否尝试过通过 Android Studios 项目结构更改范围?
文件 -> 项目结构,然后选择依赖项选项卡并添加所需模块的依赖项。在你的情况下,我相信这将是java-library。
据我所知,一旦添加,您就无法更改依赖项的范围。因此,如果您已经添加了它,请尝试删除并重新添加。但请务必分配实施范围并查看它是否有效。
我希望这可以帮到你
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |