diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java index a45d4b79b0889..060769e4fa06a 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java @@ -705,6 +705,11 @@ protected Set resolveDependencies(Path settings, Path profile) throws Ex } } + // automatic add hibernate as JPA provider when using camel-jpa + if (answer.stream().anyMatch(s -> s.contains("camel-jpa") || s.equals("camel:jpa"))) { + answer.add("mvn:org.hibernate.orm:hibernate-core"); + } + // remove duplicate versions (keep first) Map versions = new HashMap<>(); Set toBeRemoved = new HashSet<>(); diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties b/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties index f9eca1b8d5d70..d85aba89f0324 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties +++ b/dsl/camel-jbang/camel-jbang-core/src/main/resources/quarkus-dependencies.properties @@ -16,4 +16,5 @@ ## --------------------------------------------------------------------------- org.messaginghub\:pooled-jms = io.quarkiverse.messaginghub:quarkus-pooled-jms +org.hibernate.orm\:hibernate-core = io.quarkus:quarkus-hibernate-orm camel\:resilience4j = org.apache.camel.quarkus:camel-quarkus-microprofile-fault-tolerance \ No newline at end of file diff --git a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java index 9689bbd50d5a6..f5d2e31ad1ba9 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java +++ b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/ExportTest.java @@ -188,6 +188,35 @@ private Export createCommand(RuntimeType rt, String[] files, String... args) { return command; } + @ParameterizedTest + @MethodSource("runtimeProvider") + public void shouldExportWithJpaAndHibernate(RuntimeType rt) throws Exception { + LOG.info("shouldExportWithJpaAndHibernate {}", rt); + Export command = new Export(new CamelJBangMain()); + CommandLine.populateCommand(command, "--gav=examples:route:1.0.0", "--dir=" + workingDir, + "--runtime=%s".formatted(rt.runtime()), "--dep=camel:jpa", "target/test-classes/route.yaml"); + int exit = command.doCall(); + + Assertions.assertEquals(0, exit); + Model model = readMavenModel(); + + if (rt == RuntimeType.main) { + Assertions.assertTrue(containsDependency(model.getDependencies(), "org.apache.camel", "camel-jpa", null)); + Assertions.assertTrue( + containsDependency(model.getDependencies(), "org.hibernate.orm", "hibernate-core", null)); + } else if (rt == RuntimeType.springBoot) { + Assertions.assertTrue( + containsDependency(model.getDependencies(), "org.apache.camel.springboot", "camel-jpa-starter", null)); + Assertions.assertTrue( + containsDependency(model.getDependencies(), "org.hibernate.orm", "hibernate-core", null)); + } else if (rt == RuntimeType.quarkus) { + Assertions.assertTrue( + containsDependency(model.getDependencies(), "org.apache.camel.quarkus", "camel-quarkus-jpa", null)); + Assertions.assertTrue( + containsDependency(model.getDependencies(), "io.quarkus", "quarkus-hibernate-orm", null)); + } + } + @ParameterizedTest @MethodSource("runtimeProvider") public void shouldExportLazyBean(RuntimeType rt) throws Exception { diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java index e9ae59772898a..3dc0847b11f08 100644 --- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java +++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java @@ -108,6 +108,12 @@ public Component resolveComponent(String name, CamelContext context) { downloadLoader(quartz.getGroupId(), quartz.getArtifactId(), quartz.getVersion()); } } + if ("jpa".equals(name)) { + // include hibernate as JPA provider + if (!downloader.alreadyOnClasspath("org.hibernate.orm", "hibernate-core", null)) { + downloader.downloadDependency("org.hibernate.orm", "hibernate-core", "${hibernate-version}"); + } + } if ("activemq".equals(name) || "activemq6".equals(name)) { // need to include JMS connection-pool (trigger class loader to download correct JAR) try {