对多模块 gradle 项目上的模块的依赖关系



我在Gradle中有一个多模块项目。

我将通用功能重构为名为common的模块。

我在多模块项目的不同模块(假设module A(中进行了测试,这些模块使用common模块src/main/java下的类。

我能够在module A的测试类中从common模块导入这些类,但是当我运行测试时,出现以下错误:

错误:包"common.bla..."(英语:common.bla...(不存在。

这是module Abuild.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'

如前所述,很难说你的错误到底来自哪里。如果您无法使用我的最小设置来修复您自己的代码,那么可以尝试为您的非工作设置使用最小、可重现的示例来更新您的问题。

依赖关系现在很复杂。同时拥有compiletestCompiletestCompileOnly是令人困惑的,如果不是完全不正确的话。testCompileOnly可能是它在运行时不起作用的原因。

拥有compile意味着运行时和testCompile。您可以使用gradlew common:dependencies进行检查。

我认为清理依赖项会有所帮助。如果没有,请检查 jar 的内容以包含预期的类。

最新更新