我在Gradle中有一个多模块项目。
我将通用功能重构为名为common
的模块。
我在多模块项目的不同模块(假设module A
(中进行了测试,这些模块使用common
模块src/main/java
下的类。
我能够在module A
的测试类中从common
模块导入这些类,但是当我运行测试时,出现以下错误:
错误:包"common.bla..."(英语:common.bla...(不存在。
这是module A
build.gradle
文件,它依赖于common
模块进行测试(我已经尝试了所有这些选项(:
dependencies {
compile project(':common')
testCompile project(':common')
testRuntime project(':common')
runtime project(':common')
implementation project(":common")
testCompile 'junit:junit:4.12'
testImplementation 'junit:junit:4.12'
implementation 'junit:junit:4.12'
testCompileOnly project(':common')
testRuntimeOnly project(':common')
testImplementation project(':common')
runtimeOnly project(':common')
testCompile project(":common").sourceSets.test.output
compile project(":common").sourceSets.test.output
testRuntime fileTree(dir: 'libs', include: ['*.jar'])
}
我还验证了一个罐子是在common/build/libs
中创建的。
我还能尝试什么?
用这么少的上下文回答你的问题有点困难,但无论如何让我试着去做。据我了解,您的目录结构类似于以下内容(不包括 Gradle 包装器文件(:
.
├── common
│ ├── build.gradle
│ └── src
│ └── main
│ └── java
│ └── common
│ └── Foobar.java
├── moduleA
│ ├── build.gradle
│ └── src
│ └── test
│ └── java
│ └── FoobarTest.java
└── settings.gradle
我可以使用以下文件内容从根目录成功运行./gradlew :moduleA:test
(Gradle 5.6.2(:
./common/build.gradle
plugins {
id 'java'
}
./common/src/main/java/common/Foobar.java
package common;
public class Foobar {
public static void main(String... args) {
System.err.println("Foobar");
}
}
./moduleA/build.gradle
plugins {
id 'java'
}
repositories {
jcenter()
}
dependencies {
testImplementation project(':common')
testImplementation 'junit:junit:4.12'
}
./moduleA/src/test/java/FoobarTest.java
import common.Foobar;
public class FoobarTest {
@org.junit.Test
public void myTest() {
org.junit.Assert.assertNotNull(Foobar.class);
}
}
./settings.gradle
include 'common', 'moduleA'
如前所述,很难说你的错误到底来自哪里。如果您无法使用我的最小设置来修复您自己的代码,那么可以尝试为您的非工作设置使用最小、可重现的示例来更新您的问题。
依赖关系现在很复杂。同时拥有compile
和testCompile
和testCompileOnly
是令人困惑的,如果不是完全不正确的话。testCompileOnly
可能是它在运行时不起作用的原因。
拥有compile
意味着运行时和testCompile。您可以使用gradlew common:dependencies
进行检查。
我认为清理依赖项会有所帮助。如果没有,请检查 jar 的内容以包含预期的类。