对多模块gradle项目中的模块的依赖

时间:2019-09-06 19:35:49

标签: java gradle dependency-management multi-module

我在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。
我还能尝试什么?

2 个答案:

答案 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)

依赖关系现在很复杂。 compiletestCompiletestCompileOnly都令人困惑,即使不是很不正确。 testCompileOnly可能是运行时无法正常运行的原因。

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

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