Хорошо ... Я провел пару часов и, кажется, нашел ответ.Вот пример сработавшего файла pom.xml для многомодульного проекта maven для выполнения смешанных тестов JUnit 4 Vintage и JUnit 5 Jupiter вместе со смешанными тестовыми классами Java и Kotlin с ограничениями, описанными так:
src/
test/
java/
**/*JUnit4VintageJavaTest.java +
**/*JUnit4VintageKotlinTest.kt +
**/*JUnit5JupiterJavaTest.java +
**/*JUnit5JupiterKotlinTest.kt +
kotlin/
**/*JUnit4VintageJavaTest.java -
**/*JUnit4VintageKotlinTest.kt +
**/*JUnit5JupiterJavaTest.java -
**/*JUnit5JupiterKotlinTest.kt +
где
+
означает: тесты будут выполняться
-
означает: по некоторым причинам тест не будет выполняться с предоставленной конфигурацией ...
pom.xml файл:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.daggerok</groupId>
<artifactId>mixed-kotlin-java-jupiter-tests-maven-execution</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!--
<modules>
<module>module-1</module>
<module>module-2</module>
</modules>
-->
<properties>
<java.version>1.8</java.version>
<kotlin.version>1.3.31</kotlin.version>
<junit-jupiter.version>5.5.0-M1</junit-jupiter.version>
<junit-platform.version>1.5.0-M1</junit-platform.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.0.0-M3</maven-surefire-plugin.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
<!-- junit 4 -->
<dependency><!-- already contains junit:4.12 dependency, so we are not going to add it explicitly! -->
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
<dependency><!-- vintage engine is required if you wanna execute JUnit 4 together with JUnit 5 Jupiter tests... -->
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<!-- junit 5 -->
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit5</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
<!-- includes junit-jupiter-api:5.0.0 and junit-jupiter-engine:5.2.0, but we need other versions -->
<exclusions>
<exclusion>
<groupId>org.junit.jupiter</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency><!-- includes junit-jupiter-api and junit-jupiter-engine dependencies -->
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<defaultGoal>test</defaultGoal>
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<configuration>
<experimentalCoroutines>enable</experimentalCoroutines>
</configuration>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/java</sourceDir>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/test/java</sourceDir>
<sourceDir>${project.basedir}/src/test/kotlin</sourceDir>
</sourceDirs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<executions>
<execution>
<id>default-compile</id>
<phase>none</phase>
</execution>
<execution>
<id>default-testCompile</id>
<phase>none</phase>
</execution>
<execution>
<id>java-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>java-test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
</plugins>
</build>
</project>
рабочий пример расположен здесь
как проверить:
git clone https://github.com/daggerok/mixed-kotlin-java-jupiter-tests testme ; cd $_ ; mvn test
Только вопрос не может ответить, если это возможно, и как настроить проект maven, где разрешено размещать и распознавать тестовые классы Java в каталоге исходных текстов теста src / test / kotlin?Но, похоже, это другой вопрос, и его нужно закрыть.
мой PR с соответствующим образцом был просто объединен с проектом junit-team / junit5-samples и доступен здесь