Понимание публикации и реализации тестовых фикстур
Для контекста, чего я пытаюсь добиться, имея возможность использовать тестовые приборы для перекрестных проектов.
В проектах в одном репо это не проблема и работает так, как ожидалось. Однако, как внешняя зависимость, я изо всех сил пытаюсь заставить ее работать.
Прежде всего, когда я публикую артефакты, я получаю следующее предупреждение/ошибку:
Maven publication 'baz' pom metadata warnings (silence with 'suppressPomMetadataWarningsFor(variant)'):
- Variant testFixturesApiElements:
- Declares capability foo.bar:baz-test-fixtures:1.2.3-SNAPSHOT which cannot be mapped to Maven
- Variant testFixturesRuntimeElements:
- Declares capability foo.bar:baz-test-fixtures:1.2.3-SNAPSHOT which cannot be mapped to Maven
These issues indicate information that is lost in the published 'pom' metadata file, which may be an issue if the published library is consumed by an old Gradle version or Apache Maven.
The 'module' metadata file, which is used by Gradle 6+ is not affected.
Несмотря на это, артефакт публикуется, но после версии применяется классификатор (тест-фикстуры).foo.bar:baz-1.2.3-SNAPSHOT-test-fixtures.jar
. Это действительно задумано? Я ожидаю, что версия будет последней частью. Пожалуйста, поправьте меня, если я ошибаюсь здесь . Согласно https://developer.android.com/studio/publish-library/configure-test-fixtures , мне кажется, что он должен производить то, что я ожидаю, предполагаяgroupId
,artifactId
иversion
определено, какими они являются (см. Публикация тестовых фикстур с подмодулями, gradle для моей настройки).
Предполагая, что то, что я описал выше, действительно верно, я не могу автоматически ввести банку в качестве зависимости. Я попытался добавить банку в путь к классам вручную, который отлично работает, как и ожидалось. Это то, что я пробовал:
testImplementation(testFixtures("foo.bar:baz:1.2.3-SNAPSHOT"))
testImplementation(testFixtures("foo.bar:baz:1.2.3-SNAPSHOT-test-fixtures"))
Я попытался переименовать сам файл jar, но это тоже не работает.
Возвращаясь к вопросу во время публикации. Возможно, я что-то упустил, чтобы обеспечить эту возможность моего артефакта?
РЕДАКТИРОВАТЬ:
// Build.gradle.kts in baz submodule
plugins {
id("java-library")
id("java-test-fixtures")
}
dependencies {
testFixturesApi(project(":baz"))
}
import org.springframework.boot.gradle.tasks.bundling.BootJar
// values, ie val javaVersion: String by project.
allprojects {
group = "${projectGroup}.${rootProject.name}"
version = projectVersion
}
repositories {
mavenCentral()
mavenLocal()
}
plugins {
id("org.springframework.boot") version "2.6.1" apply false
id("io.spring.dependency-management") version "1.0.11.RELEASE" apply false
kotlin("jvm") version "1.6.0"
kotlin("plugin.spring") version "1.6.0"
id("maven-publish")
}
tasks {
withType<JavaCompile> {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
}
withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = javaVersion
}
}
withType<Test> {
useJUnitPlatform()
}
withType<Wrapper> {
gradleVersion = "7.3"
}
withType<BootJar> {
enabled = false
}
}
subprojects {
repositories {
mavenCentral()
mavenLocal()
}
apply {
plugin("io.spring.dependency-management")
plugin("org.springframework.boot")
plugin("org.jetbrains.kotlin.jvm")
plugin("org.jetbrains.kotlin.plugin.spring")
plugin("org.jetbrains.kotlin.plugin.jpa")
plugin("maven-publish")
}
tasks {
register("prepareKotlinBuildScriptModel") {}
withType<BootJar> {
enabled = false
}
withType<Test> {
useJUnitPlatform()
}
getByName<Jar>("jar") {
enabled = true
}
}
publishing {
publications {
create<MavenPublication>(project.name) {
artifactId = "${shortName}-${tasks.jar.get().archiveBaseName.get()}"
val javaComponent =
from(components["java"])
}
}
}
}
Помимо вывода, который я включил выше, выполняются следующие задачи:
> Task :baz:compileTestFixturesKotlin
> Task :baz:compileTestFixturesJava NO-SOURCE
> Task :baz:processTestFixturesResources NO-SOURCE
> Task :baz:testFixturesClasses UP-TO-DATE
> Task :baz:testFixturesJar
> Task :baz:generateMetadataFileForBazPublication
> Task :baz:generatePomFileForBazPublication
> Task :baz:publishBazPublicationToMavenLocal
> Task :baz:publishToMavenLocal
РЕДАКТИРОВАТЬ 2:
Это также вmaven-metadata-local.xml
<snapshotVersion>
<classifier>test-fixtures</classifier>
<extension>jar</extension>
<value>1.2.3-SNAPSHOT</value>
<updated>20230213100621</updated>
</snapshotVersion>
1 ответ
В проекте, где будут использоваться тестовые приспособления, вам следует использовать
testImplementation(testFixtures("foo.bar:baz:1.2.3-SNAPSHOT"))