pom.xml Maven 配置到 运行 JUnit 4 + JUnit 5 Jupiter 混合测试 Java + Kotlin 项目
pom.xml Maven configuration to run JUnit 4 + JUnit 5 Jupiter tests in mixed Java + Kotlin project
我无法将 Maven 项目成功配置为 运行 Java 和 Kotlin 的混合 JUnit 4/JUnit 5 Jupiter 测试。
我配置 Gradle 没有问题(例如 this configuration works well 满足我的需要),但配置 Maven 没有问题。我已经尝试过使用不同版本的 JUnit Jupiter 和平台依赖项对 maven、Kotlin、surefire 插件进行不同的配置,但没有成功...
你们谁能提供实例吗?
我还在 JUnit 团队 GitHub issues 和 Kotlin slack 频道中发布了类似的问题:
- https://github.com/junit-team/junit5/issues/1899
- https://kotlinlang.slack.com/archives/C0922A726/p155880442804330
此致,
马克西姆
好的...我花了几个小时,似乎找到了答案。这里是 multi-module maven 项目的工作 pom.xml 文件示例,用于执行混合的 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>
工作示例位于 here
如何验证:
git clone https://github.com/daggerok/mixed-kotlin-java-jupiter-tests testme ; cd $_ ; mvn test
只有问题无法回答是否可能以及如何在允许的位置配置 maven 项目并在 src/test/kotlin 测试源目录中识别 java 测试 类?但似乎这是一个不同的问题,必须关闭这个问题。
我的带有相应示例的 PR 刚刚合并到 junit-team/junit5-samples 项目并且可用 here
我无法将 Maven 项目成功配置为 运行 Java 和 Kotlin 的混合 JUnit 4/JUnit 5 Jupiter 测试。
我配置 Gradle 没有问题(例如 this configuration works well 满足我的需要),但配置 Maven 没有问题。我已经尝试过使用不同版本的 JUnit Jupiter 和平台依赖项对 maven、Kotlin、surefire 插件进行不同的配置,但没有成功...
你们谁能提供实例吗?
我还在 JUnit 团队 GitHub issues 和 Kotlin slack 频道中发布了类似的问题: - https://github.com/junit-team/junit5/issues/1899 - https://kotlinlang.slack.com/archives/C0922A726/p155880442804330
此致, 马克西姆
好的...我花了几个小时,似乎找到了答案。这里是 multi-module maven 项目的工作 pom.xml 文件示例,用于执行混合的 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>
工作示例位于 here
如何验证:
git clone https://github.com/daggerok/mixed-kotlin-java-jupiter-tests testme ; cd $_ ; mvn test
只有问题无法回答是否可能以及如何在允许的位置配置 maven 项目并在 src/test/kotlin 测试源目录中识别 java 测试 类?但似乎这是一个不同的问题,必须关闭这个问题。
我的带有相应示例的 PR 刚刚合并到 junit-team/junit5-samples 项目并且可用 here