У меня есть базовый проект в kotlin, настроенный с помощью gradle dsl.
Внутри базы у меня есть модуль «приложение» и модуль «библиотека».
Модуль приложение использует библиотеку модулей.
Я хочу получить доступ к тестам библиотеки модулей из тестов приложения модуля (точнее, пакета testUtils библиотеки).
Файл app.build gradle имеет строку implementation(project(":library"))
, и поэтому я не могу получить доступ к тестам библиотеки в своем основном коде, что хорошо, но я также не могу получить к нему доступ из тестов приложения.
Я прочитал этот вопрос (возможный дубликат этот вопрос ), где соответствующий код groovy:
task testJar(type: Jar, dependsOn: testClasses) {
baseName = "test-${project.archivesBaseName}"
from sourceSets.test.output
}
configurations {
tests
}
artifacts {
tests testJar
}
но я не смог реализовать его в Gradle DSL.
Также я проверил этот вопрос где код:
tasks {
val sourcesJar by creating(Jar::class) {
dependsOn(JavaPlugin.CLASSES_TASK_NAME)
classifier = "sources"
from(sourceSets["main"].allSource)
}
val javadocJar by creating(Jar::class) {
dependsOn(JavaPlugin.JAVADOC_TASK_NAME)
classifier = "javadoc"
from(tasks["javadoc"])
}
artifacts {
add("archives", sourcesJar)
add("archives", javadocJar)
}
}
Мне нужно как-то добавить testImplementation
не только с исходным кодом библиотеки, но и с тестами библиотеки, чтобы в тестах приложения я мог использовать тестовые пакеты библиотеки, а в исходном коде приложения я не мог использовать тесты библиотеки .
Спасибо.
Обновление:
base.build:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.time.Duration
plugins {
kotlin("jvm") version "1.3.21"
}
allprojects {
repositories {
jcenter()
}
}
subprojects {
apply(plugin = "kotlin")
dependencies {
implementation(kotlin("stdlib-jdk8"))
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
tasks.withType<Test> {
useJUnitPlatform()
// Make sure tests don't take over 10 minutes
timeout.set(Duration.ofMinutes(10))
}
}
base.settings:
import java.net.URI
rootProject.name = "base"
sourceControl {
gitRepository(URI("https://github.com/path-to-github.git")) {
producesModule("path.to.package:primitive-storage-layer")
}
}
include("library")
include("app")
app.build:
plugins {
application
}
application {
mainClassName = "path.to.package.MainKt"
}
val junitVersion = "5.5.0-M1"
val hamkrestVersion = "1.7.0.0"
val mockkVersion = "1.9.3"
dependencies {
implementation(project(":library"))
testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
testImplementation("org.junit.jupiter:junit-jupiter-params:$junitVersion")
testImplementation("com.natpryce:hamkrest:$hamkrestVersion")
testImplementation("io.mockk:mockk:$mockkVersion")
runtime("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
}
library.build:
val primitiveLibraryVersion = "1.0"
val gsonVersion = "2.8.5"
val junitVersion = "5.5.0-M1"
val mockkVersion = "1.9.3"
dependencies {
implementation("path.to.package:primitive-storage-layer:$primitiveLibraryVersion")
implementation("com.google.code.gson:gson:$gsonVersion")
testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
testImplementation("io.mockk:mockk:$mockkVersion")
}