From 9c7a785d78e582cb27f11e64f2c27e31913dfe87 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 31 Jan 2019 06:18:46 +0300 Subject: [PATCH] Add an integration test of using modular artifacts with jlink in JDK9 Setup maven plugin integration test execution with JDK9 as java home. --- .../tools/kotlin-maven-plugin-test/pom.xml | 22 +++- .../test-jlink-modular-artifacts/app/pom.xml | 60 ++++++++++ .../app/src/main/java/module-info.java | 6 + .../main/java/org/test/modularApp/Hello.kt | 13 +++ .../jlinked/pom.xml | 105 ++++++++++++++++++ .../test-jlink-modular-artifacts/pom.xml | 43 +++++++ .../verify.groovy | 22 ++++ 7 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/pom.xml create mode 100644 libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/module-info.java create mode 100644 libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/org/test/modularApp/Hello.kt create mode 100644 libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/jlinked/pom.xml create mode 100644 libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/pom.xml create mode 100644 libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/verify.groovy diff --git a/libraries/tools/kotlin-maven-plugin-test/pom.xml b/libraries/tools/kotlin-maven-plugin-test/pom.xml index 2df1c39f552..6625860322e 100644 --- a/libraries/tools/kotlin-maven-plugin-test/pom.xml +++ b/libraries/tools/kotlin-maven-plugin-test/pom.xml @@ -107,8 +107,6 @@ maven-invoker-plugin 2.0.0 - src/it - ${project.build.directory}/it */pom.xml @@ -131,6 +129,10 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk7:${project.version} org.jetbrains.kotlin:kotlin-stdlib-jdk8:${project.version} org.jetbrains.kotlin:kotlin-reflect:${project.version} + org.jetbrains.kotlin:kotlin-stdlib:${project.version}:jar:modular + org.jetbrains.kotlin:kotlin-stdlib-jdk7:${project.version}:jar:modular + org.jetbrains.kotlin:kotlin-stdlib-jdk8:${project.version}:jar:modular + org.jetbrains.kotlin:kotlin-reflect:${project.version}:jar:modular org.jetbrains.kotlin:kotlin-test-common:${project.version} org.jetbrains.kotlin:kotlin-test-annotations-common:${project.version} org.jetbrains.kotlin:kotlin-test:${project.version} @@ -152,12 +154,28 @@ integration-test + + src/it + ${project.build.directory}/it + install run + + integration-test-java9 + + src/it/java9 + ${project.build.directory}/it/java9 + ${env.JDK_9} + + + install + run + + diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/pom.xml b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/pom.xml new file mode 100644 index 00000000000..72309cf3233 --- /dev/null +++ b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/pom.xml @@ -0,0 +1,60 @@ + + + + test-mavenModular + org.test + 1.0-SNAPSHOT + + 4.0.0 + + test-mavenModularApp + + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + + + + org.jetbrains.kotlin + kotlin-test-junit + ${kotlin.version} + test + + + + + src/main/java + src/test/java + + + + org.jetbrains.kotlin + kotlin-maven-plugin + ${kotlin.version} + + + compile + process-sources + + compile + + + + test-compile + test-compile + + test-compile + + + + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/module-info.java b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/module-info.java new file mode 100644 index 00000000000..66b859df73e --- /dev/null +++ b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/module-info.java @@ -0,0 +1,6 @@ +module org.test.modularApp { + requires transitive kotlin.stdlib; + requires kotlin.stdlib.jdk8; + + exports org.test.modularApp; +} \ No newline at end of file diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/org/test/modularApp/Hello.kt b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/org/test/modularApp/Hello.kt new file mode 100644 index 00000000000..d81c2e48a69 --- /dev/null +++ b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/app/src/main/java/org/test/modularApp/Hello.kt @@ -0,0 +1,13 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.test.modularApp + +import kotlin.math.* +import kotlin.random.* + +fun main() { + println(Random.nextDouble(abs(sin(PI) + cos(PI)))) +} \ No newline at end of file diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/jlinked/pom.xml b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/jlinked/pom.xml new file mode 100644 index 00000000000..6567fbbad7d --- /dev/null +++ b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/jlinked/pom.xml @@ -0,0 +1,105 @@ + + + + test-mavenModular + org.test + 1.0-SNAPSHOT + + 4.0.0 + + test-mavenModular-jlinked + jar + + + + + org.jetbrains.kotlin + kotlin-stdlib + ${kotlin.version} + modular + + + org.jetbrains.kotlin + kotlin-stdlib-common + + + org.jetbrains + annotations + + + + + org.jetbrains.kotlin + kotlin-stdlib-jdk7 + ${kotlin.version} + modular + + + org.jetbrains.kotlin + kotlin-stdlib + + + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + ${kotlin.version} + modular + + + org.jetbrains.kotlin + kotlin-stdlib-jdk7 + + + org.jetbrains.kotlin + kotlin-stdlib + + + + + + org.test + test-mavenModularApp + 1.0-SNAPSHOT + + + org.jetbrains.kotlin + kotlin-stdlib-jdk8 + + + + + + + + + + maven-jar-plugin + + + + default-jar + + + + + + org.apache.maven.plugins + maven-jlink-plugin + 3.0.0-alpha-1 + + + jlink + + + + + + + \ No newline at end of file diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/pom.xml b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/pom.xml new file mode 100644 index 00000000000..d3b42401e17 --- /dev/null +++ b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/pom.xml @@ -0,0 +1,43 @@ + + + + 4.0.0 + + org.test + test-mavenModular + 1.0-SNAPSHOT + pom + + mavenModular Example + + + UTF-8 + 4.12 + + + + app + jlinked + + + + + + + maven-compiler-plugin + 3.8.0 + + 1.9 + 1.9 + + + + maven-surefire-plugin + 2.22.1 + + + + + + + diff --git a/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/verify.groovy b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/verify.groovy new file mode 100644 index 00000000000..7cd23c168d1 --- /dev/null +++ b/libraries/tools/kotlin-maven-plugin-test/src/it/java9/test-jlink-modular-artifacts/verify.groovy @@ -0,0 +1,22 @@ +import java.io.*; + +File file = new File(basedir, "jlinked/target/maven-jlink/release") +if (!file.exists() || !file.isFile()) { + throw new FileNotFoundException("Could not find generated image release file: " + file) +} + +def releaseProps = new Properties() +releaseProps.load(new FileReader(file)) + +def modules = releaseProps.getProperty("MODULES") +assert modules != null : "MODULES property missing" + +if (modules.startsWith("\"") && modules.endsWith("\"")) modules = modules[1..-2] + +println("jlink has built an image with modules: $modules") + +def moduleSet = modules.tokenize(" ").toSet() + +for (module in ["java.base", "kotlin.stdlib", "kotlin.stdlib.jdk7", "kotlin.stdlib.jdk8", "org.test.modularApp"]) { + assert moduleSet.contains(module) : "Expected to find $module in image modules: $modules" +} \ No newline at end of file