我有两个项目,项目A和项目B.两者都是用groovy编写的,并使用gradle作为他们的构建系统.
项目A需要项目B.这适用于编译和测试代码.
如何配置项目A的测试类可以访问项目B的测试类?
我正在开发一个包含多个模块的Spring Boot应用程序,我们正在使用Gradle来构建它.不幸的是我无法正确使用Gradle配置.
项目结构如下:
parent
|
+ build.gradle
|
+ settings.gradle
|
+ core
| |
| + build.gradle
|
+ apis
| |
| + build.gradle
|
+ services
| |
| + build.gradle
|
+ data
| |
| + build.gradle
Run Code Online (Sandbox Code Playgroud)
当我尝试构建项目时,我遇到编译错误,比如说error: cannot find symbol,不会导入服务中使用的数据类.我认为所有模块之间都是如此.
我的父build.gradle看起来像这样:
buildscript {
ext {
springBootVersion = '2.0.0.BUILD-SNAPSHOT'
}
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
apply plugin: 'eclipse'
apply …Run Code Online (Sandbox Code Playgroud) 使用Android Studio 3.0/android_gradle_version ='3.0.1'/ gradle-4.5
假设我有两个android模块
module-base
module-a
Run Code Online (Sandbox Code Playgroud)
当我想从module-a中的module-base访问源代码时,我只需要在我的module-a.gradle中编写它
dependencies {
implementation project(path: ':module-base')
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在模块-a的测试中从模块库访问测试源呢? 这里没有像上面那样工作的方法
dependencies {
testImplementation project(path: ':module-base')
}
Run Code Online (Sandbox Code Playgroud)
我找到了很多建议(几年前)
compileTestJava.dependsOn tasks.getByPath(':module-base:testClasses')
testCompile files(project(':module-base').sourceSets.test.output.classesDir)
Run Code Online (Sandbox Code Playgroud)
要么
testCompile project(':module-base).sourceSets.test.classes
但没有人提到过.从编译器的角度来看总是有问题: - /
你能帮助我如何在两个模块之间创建Android测试代码依赖吗?
unit-testing android-studio build.gradle android-gradle-plugin gradle-plugin
我正在使用Gradle来构建和测试我的项目.我有两个项目:
ProjA contains src\test\java\BaseTest.java
ProjB contains src\test\java\MyTest.java
MyTest extends BaseTest
Run Code Online (Sandbox Code Playgroud)
当我跑步时ProjB.gradle,如何让它BaseTest从ProjA 看到这个课程?
我尝试添加:
dependencies {
testCompile project('ProjA')
}
Run Code Online (Sandbox Code Playgroud)
但它没有用.
我在maven中有一个多项目设置并试图切换到gradle.我试图弄清楚如何让一个项目的测试依赖包括另一个项目的测试jar.现在我在ProjectA中有以下内容:
packageTests = task packageTests(type: Jar) {
classifier = 'tests'
from sourceSets.test.output
}
tasks.getByPath(":ProjectA:jar").dependsOn(packageTests)
Run Code Online (Sandbox Code Playgroud)
在ProjectB我有:
testCompile project(path: ':ProjectA', classifier: 'tests')
Run Code Online (Sandbox Code Playgroud)
我看到我的测试无法编译.看起来他们缺少测试jar中定义的类.当我检查构建目录时,我看到ProjectA-0.1.56-SNAPSHOT-tests.jar存在.
在maven中,我有以下ProjectA:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这对于ProjectB来说:
<!-- Testing -->
<dependency>
<groupId>com.example</groupId>
<artifactId>ProjectA</artifactId>
<version>0.1.56-SNAPSHOT</version>
<type>test-jar</type>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它像maven一样工作?
ProjectA包含一个抽象的单元测试,TestA。
ProjectB有一个名为的测试TestB,需要从扩展到TestA,才能满足此特定实现的测试要求。
我加入build.gradle的配置文件ProjectB,ProjectA作为一个依赖编译测试:
testCompile project(':ProjectA')
Run Code Online (Sandbox Code Playgroud)
另外,作为依赖项编译:
compile project(':ProjectA')
Run Code Online (Sandbox Code Playgroud)
虽然我可以从扩展TestA,但是当我尝试运行时却TestB遇到了下一个错误:
error: cannot find symbol class TestA
Run Code Online (Sandbox Code Playgroud)
那么,有什么方法可以在模块之间共享测试代码?
谢谢。
gradle ×5
java ×3
build.gradle ×2
android ×1
build ×1
maven ×1
spring ×1
spring-boot ×1
testing ×1
unit-testing ×1