我在Gradle中有一个多模块项目。
我将 常用功能 重构为名为common
的模块。
我在多模块项目的另一个模块(比如说module A
)中进行了测试,这些测试使用了src/main/java
模块的common
下的类。
我能够从common
的测试类中的module A
模块导入这些类,但是在运行测试时,出现以下错误:
错误:包'common.bla ...'不存在。
这是build.gradle
的{{1}}文件,它依赖于module A
模块进行测试(我已经尝试了所有这些选项):
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'])
}
中创建了一个jar。
我还能尝试什么?
答案 0 :(得分:1)
在这么少的背景下回答您的问题有点困难,但无论如何我还是要尝试解决。据我了解,您具有类似于以下内容的目录结构(不包括Gradle Wrapper文件):
library(broom)
lapply(mget(ls(pattern = "^m\\d+$")), glance)
我可以使用以下文件内容从根目录成功运行.
├── common
│ ├── build.gradle
│ └── src
│ └── main
│ └── java
│ └── common
│ └── Foobar.java
├── moduleA
│ ├── build.gradle
│ └── src
│ └── test
│ └── java
│ └── FoobarTest.java
└── settings.gradle
(5.6.2版):
./gradlew :moduleA:test
./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
如上所述,很难说出您的错误的确切来源。如果您无法使用我的最小设置来修复自己的代码,则可以尝试使用minimal, reproducible example来更新无效的设置。
答案 1 :(得分:0)
依赖关系现在很复杂。 compile
和testCompile
和testCompileOnly
都令人困惑,即使不是很不正确。 testCompileOnly
可能是运行时无法正常运行的原因。
具有compile
也意味着运行时和testCompile。您可以使用gradlew common:dependencies
进行检查。
我认为清理依赖项会有所帮助。如果不是,请检查jar的内容以包含预期的类。