You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/11/06 16:12:18 UTC
[camel] 03/04: CAMEL-18205: camel-jbang - Export as gradle project
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 <cl...@gmail.com>
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 }}
}