This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 26b861ac23bb303447087e7afd2f6323ab50e29f Author: Claus Ibsen <[email protected]> AuthorDate: Sun Nov 6 13:05:52 2022 +0100 CAMEL-18205: camel-jbang - Export as gradle project --- .../dsl/jbang/core/commands/ExportQuarkus.java | 108 ++++++++++++++++++++- .../resources/templates/quarkus-build-gradle.tmpl | 39 ++++++++ .../templates/quarkus-gradle-properties.tmpl | 7 ++ .../templates/quarkus-settings-gradle.tmpl | 11 +++ .../templates/spring-boot-build-gradle.tmpl | 2 +- 5 files changed, 162 insertions(+), 5 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java index d0c70e68627..95135f489f2 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java @@ -123,10 +123,13 @@ class ExportQuarkus extends Export { createPom(settings, new File(BUILD_DIR, "pom.xml"), deps); if (mavenWrapper) { copyMavenWrapper(); - } else if ("gradle".equals(project)) { - if (gradleWrapper) { - copyGradleWrapper(); - } + } + } else if ("gradle".equals(project)) { + createGradleProperties(new File(BUILD_DIR, "gradle.properties")); + createSettingsGradle(new File(BUILD_DIR, "settings.gradle")); + createBuildGradle(settings, new File(BUILD_DIR, "build.gradle"), deps); + if (gradleWrapper) { + copyGradleWrapper(); } } @@ -140,6 +143,103 @@ class ExportQuarkus extends Export { return 0; } + private void createGradleProperties(File output) throws Exception { + InputStream is = ExportQuarkus.class.getClassLoader().getResourceAsStream("templates/quarkus-gradle-properties.tmpl"); + String context = IOHelper.loadText(is); + IOHelper.close(is); + + context = context.replaceFirst("\\{\\{ \\.QuarkusGroupId }}", quarkusGroupId); + context = context.replaceFirst("\\{\\{ \\.QuarkusArtifactId }}", quarkusArtifactId); + context = context.replaceAll("\\{\\{ \\.QuarkusVersion }}", quarkusVersion); + + IOHelper.writeText(context, new FileOutputStream(output, false)); + } + + private void createSettingsGradle(File output) throws Exception { + String[] ids = gav.split(":"); + + InputStream is = ExportQuarkus.class.getClassLoader().getResourceAsStream("templates/quarkus-settings-gradle.tmpl"); + String context = IOHelper.loadText(is); + IOHelper.close(is); + + context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]); + context = context.replaceFirst("\\{\\{ \\.ArtifactId }}", ids[1]); + context = context.replaceFirst("\\{\\{ \\.Version }}", ids[2]); + + IOHelper.writeText(context, new FileOutputStream(output, false)); + } + + private void createBuildGradle(File settings, File gradleBuild, Set<String> deps) throws Exception { + String[] ids = gav.split(":"); + + InputStream is = ExportSpringBoot.class.getClassLoader().getResourceAsStream("templates/quarkus-build-gradle.tmpl"); + String context = IOHelper.loadText(is); + IOHelper.close(is); + + CamelCatalog catalog = loadQuarkusCatalog(); + if (camelVersion == null) { + camelVersion = catalog.getCatalogVersion(); + } + String camelVersion = catalog.getCatalogVersion(); + + context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]); + context = context.replaceFirst("\\{\\{ \\.ArtifactId }}", ids[1]); + context = context.replaceFirst("\\{\\{ \\.Version }}", ids[2]); + context = context.replaceFirst("\\{\\{ \\.QuarkusGroupId }}", quarkusGroupId); + context = context.replaceFirst("\\{\\{ \\.QuarkusArtifactId }}", quarkusArtifactId); + context = context.replaceAll("\\{\\{ \\.QuarkusVersion }}", quarkusVersion); + context = context.replaceAll("\\{\\{ \\.JavaVersion }}", javaVersion); + context = context.replaceAll("\\{\\{ \\.CamelVersion }}", camelVersion); + + Properties prop = new CamelCaseOrderedProperties(); + RuntimeUtil.loadProperties(prop, settings); + String repos = prop.getProperty("camel.jbang.repos"); + if (repos == null) { + context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", ""); + } else { + StringBuilder sb = new StringBuilder(); + for (String repo : repos.split(",")) { + sb.append(" maven {\n"); + sb.append(" url: '").append(repo).append("'\n"); + sb.append(" }\n"); + } + context = context.replaceFirst("\\{\\{ \\.MavenRepositories }}", sb.toString()); + } + + List<MavenGav> gavs = new ArrayList<>(); + for (String dep : deps) { + MavenGav gav = MavenGav.parseGav(dep); + String gid = gav.getGroupId(); + String aid = gav.getArtifactId(); + // transform to camel-quarkus extension GAV + if ("org.apache.camel".equals(gid)) { + String qaid = aid.replace("camel-", "camel-quarkus-"); + ArtifactModel<?> am = catalog.modelFromMavenGAV("org.apache.camel.quarkus", qaid, null); + if (am != null) { + // use quarkus extension + gav.setGroupId(am.getGroupId()); + gav.setArtifactId(am.getArtifactId()); + gav.setVersion(quarkusVersion); + } else { + // there is no quarkus extension so use plain camel + gav.setVersion(camelVersion); + } + } + gavs.add(gav); + } + + // sort artifacts + gavs.sort(mavenGavComparator()); + + StringBuilder sb = new StringBuilder(); + for (MavenGav gav : gavs) { + sb.append(" implementation '").append(gav.toString()).append("'\n"); + } + context = context.replaceFirst("\\{\\{ \\.CamelDependencies }}", sb.toString()); + + IOHelper.writeText(context, new FileOutputStream(gradleBuild, false)); + } + @Override protected String applicationPropertyLine(String key, String value) { // quarkus use dash cased properties and lets turn camel into dash as well diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-build-gradle.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-build-gradle.tmpl new file mode 100644 index 00000000000..f64a9a4f46a --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-build-gradle.tmpl @@ -0,0 +1,39 @@ +plugins { + id 'java' + id 'io.quarkus' +} + +repositories { + mavenCentral() + mavenLocal() +{{ .MavenRepositories }} +} + +dependencies { + implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}") + implementation enforcedPlatform("${quarkusPlatformGroupId}:quarkus-camel-bom:${quarkusPlatformVersion}") + implementation 'io.quarkus:quarkus-arc' +{{ .CamelDependencies }} + testImplementation 'io.quarkus:quarkus-junit5' + testImplementation 'org.apache.camel.quarkus:camel-quarkus-junit5:${quarkusPlatformVersion}' +} + +group = '{{ .GroupId }}' +version = '{{ .Version }}' + +java { + sourceCompatibility = '{{ .JavaVersion }}' + targetCompatibility = '{{ .JavaVersion }}' +} + +test { + systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager" +} +compileJava { + options.encoding = 'UTF-8' + options.compilerArgs << '-parameters' +} + +compileTestJava { + options.encoding = 'UTF-8' +} \ No newline at end of file diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-gradle-properties.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-gradle-properties.tmpl new file mode 100644 index 00000000000..4beeb36b68b --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-gradle-properties.tmpl @@ -0,0 +1,7 @@ +gradle.properties +#Gradle properties +quarkusPluginId=io.quarkus +quarkusPluginVersion={{ .QuarkusVersion }} +quarkusPlatformGroupId={{ .QuarkusGroupId }} +quarkusPlatformArtifactId={{ .QuarkusArtifactId }} +quarkusPlatformVersion={{ .QuarkusVersion }} \ No newline at end of file diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-settings-gradle.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-settings-gradle.tmpl new file mode 100644 index 00000000000..4d63110b59d --- /dev/null +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/quarkus-settings-gradle.tmpl @@ -0,0 +1,11 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + mavenLocal() + } + plugins { + id "${quarkusPluginId}" version "${quarkusPluginVersion}" + } +} +rootProject.name='{{ .ArtifactId }}' \ No newline at end of file diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl index 1f0ffc6cd8f..3d64253738f 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/templates/spring-boot-build-gradle.tmpl @@ -9,8 +9,8 @@ version = '{{ .Version }}' sourceCompatibility = '{{ .JavaVersion }}' repositories { - mavenLocal() mavenCentral() + mavenLocal() {{ .MavenRepositories }} }
