@@ -6,6 +6,9 @@ import java.io.File
66
77/* *
88 * Gradle task that generates a SmithyVersionProvider SPI implementation for a module.
9+ *
10+ * The implementation is generated into the module's own package to avoid classpath
11+ * conflicts when multiple modules are on the classpath.
912 */
1013abstract class GenerateVersionProviderTask : DefaultTask () {
1114
@@ -19,7 +22,7 @@ abstract class GenerateVersionProviderTask : DefaultTask() {
1922 var outputDir: File = project.layout.buildDirectory.dir(" generated/version-provider" ).get().asFile
2023
2124 companion object {
22- private const val PACKAGE = " software.amazon.smithy.java.versionspi"
25+ private const val SPI_PACKAGE = " software.amazon.smithy.java.versionspi"
2326 private const val INTERFACE_NAME = " SmithyVersionProvider"
2427 private const val RECORD_NAME = " ModuleVersion"
2528 private const val IMPL_NAME = " GeneratedVersionProvider"
@@ -32,13 +35,22 @@ abstract class GenerateVersionProviderTask : DefaultTask() {
3235 val minor = parts.getOrElse(1 ) { " 0" }
3336 val patch = parts.getOrElse(2 ) { " 0" }.replace(Regex (" [^0-9].*" ), " " )
3437
35- val packageDir = File (outputDir, " java/${PACKAGE .replace(' .' , ' /' )} " )
38+ // Use the module's own package for the implementation class
39+ val implPackage = moduleName
40+ val packageDir = File (outputDir, " java/${implPackage.replace(' .' , ' /' )} " )
3641 packageDir.mkdirs()
3742
38- // Generate the implementation
43+ val fqInterface = " $SPI_PACKAGE .$INTERFACE_NAME "
44+ val fqRecord = " $SPI_PACKAGE .$RECORD_NAME "
45+ val fqImpl = " $implPackage .$IMPL_NAME "
46+
47+ // Generate the implementation in the module's own package
3948 File (packageDir, " $IMPL_NAME .java" ).writeText(
4049 """
41- |package $PACKAGE ;
50+ |package $implPackage ;
51+ |
52+ |import $fqInterface ;
53+ |import $fqRecord ;
4254 |
4355 |public final class $IMPL_NAME implements $INTERFACE_NAME {
4456 | private static final $RECORD_NAME VERSION = new $RECORD_NAME ("$moduleName ", $major , $minor , $patch );
@@ -54,8 +66,8 @@ abstract class GenerateVersionProviderTask : DefaultTask() {
5466 // Generate META-INF/services file
5567 val servicesDir = File (outputDir, " resources/META-INF/services" )
5668 servicesDir.mkdirs()
57- File (servicesDir, " $PACKAGE . $INTERFACE_NAME " ).writeText(
58- " $PACKAGE . $IMPL_NAME \n "
69+ File (servicesDir, fqInterface ).writeText(
70+ " $fqImpl \n "
5971 )
6072 }
6173}
0 commit comments