This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/master by this push:
     new 6ad3987  Enable Spring dependent extensions to work with Quarkus Spring
6ad3987 is described below

commit 6ad398704314a38fae95b244b01045f750a51253
Author: James Netherton <jamesnether...@gmail.com>
AuthorDate: Wed Oct 21 07:54:35 2020 +0100

    Enable Spring dependent extensions to work with Quarkus Spring
    
    Fixes #1759
---
 .gitignore                                         |   1 +
 extensions-support/spring/README.adoc              |  49 ++++++++++
 .../spring/beans}/pom.xml                          |  83 +++++++----------
 .../spring/context}/pom.xml                        |  80 ++++++++--------
 extensions-support/spring/core/pom.xml             |  97 +++++++++++++++++++
 extensions-support/spring/integration-test/pom.xml | 103 +++++++++++++++++++++
 .../support/spring/ClassLoadingService.java        |  31 +++++++
 .../support/spring/test/SpringSupportTest.java     |  48 ++++++++++
 extensions-support/spring/pom.xml                  |   4 +
 extensions-support/spring/runtime/pom.xml          |  12 ++-
 extensions/jpa/runtime/pom.xml                     |   4 -
 pom.xml                                            |   7 ++
 poms/bom/pom.xml                                   |  57 ++++++++++++
 13 files changed, 480 insertions(+), 96 deletions(-)

diff --git a/.gitignore b/.gitignore
index 873f81c..cc360b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ pom.xml.releaseBackup
 pom.xml.versionsBackup
 pom.xml.next
 release.properties
+dependency-reduced-pom.xml
 
 # Eclipse
 .project
diff --git a/extensions-support/spring/README.adoc 
b/extensions-support/spring/README.adoc
new file mode 100644
index 0000000..871efde
--- /dev/null
+++ b/extensions-support/spring/README.adoc
@@ -0,0 +1,49 @@
+= Spring Support
+
+This extension provides common support for Camel components that depend on 
`org.springframework` libraries:
+
+* spring-beans
+* spring-context
+* spring-core
+
+== Repackaging of core Spring libraries
+
+The Quarkus Spring extensions offers a limited set of supported packages for 
the Spring framework. This is achieved by shading the desired packages into a 
new quarkus-spring-*-api dependency. These can be found at the 
https://github.com/quarkusio/quarkus-spring-api[quarkus-spring-api] project.
+
+A side effect of this is that the Quarkus Spring extensions enforce the 
exclusion of the original Spring artifacts from the build via the 
`quarkus-bootstrap-maven-plugin`. For example:
+
+[source,xml]
+----
+<plugin>
+    <groupId>io.quarkus</groupId>
+    <artifactId>quarkus-bootstrap-maven-plugin</artifactId>
+    <configuration>
+        <excludedArtifacts>
+            
<excludedArtifact>org.springframework:spring-core</excludedArtifact>
+            
<excludedArtifact>org.springframework:spring-beans</excludedArtifact>
+            
<excludedArtifact>org.springframework:spring-context</excludedArtifact>
+        </excludedArtifacts>
+    </configuration>
+</plugin>
+----
+
+Therefore, in order to circumvent the artifact exclusion, the excluded Spring 
artifacts are shaded and repackaged with relevant packages required by various 
Camel extensions.
+
+[width="100%",cols="30,70",options="header"]
+|===
+| Original Spring Artifact Name | Repackaged Artifact Name
+
+
+| `spring-beans`
+| `camel-quarkus-support-spring-beans`
+
+| `spring-context`
+| `camel-quarkus-support-spring-context`
+
+| `spring-core`
+| `camel-quarkus-support-spring-core`
+|=== 
+
+== Native support
+
+This extension contains the relevant Quarkus `BuildStep`s and GraalVM 
substitutions that enable the Spring core libraries to work properly in native 
mode.
diff --git a/extensions/jpa/runtime/pom.xml 
b/extensions-support/spring/beans/pom.xml
similarity index 51%
copy from extensions/jpa/runtime/pom.xml
copy to extensions-support/spring/beans/pom.xml
index 6f069d1..11398b0 100644
--- a/extensions/jpa/runtime/pom.xml
+++ b/extensions-support/spring/beans/pom.xml
@@ -18,22 +18,15 @@
 
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-jpa-parent</artifactId>
+        <artifactId>camel-quarkus-support-spring-parent</artifactId>
         <version>1.4.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-quarkus-jpa</artifactId>
-    <name>Camel Quarkus :: JPA :: Runtime</name>
-    <description>Store and retrieve Java objects from databases using Java 
Persistence API (JPA).</description>
-
-    <properties>
-        <camel.quarkus.jvmSince>1.0.0</camel.quarkus.jvmSince>
-        <camel.quarkus.nativeSince>1.0.0</camel.quarkus.nativeSince>
-    </properties>
+    <artifactId>camel-quarkus-support-spring-beans</artifactId>
+    <name>Camel Quarkus :: Support :: Spring :: Beans</name>
 
     <dependencyManagement>
         <dependencies>
@@ -49,57 +42,53 @@
 
     <dependencies>
         <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-hibernate-orm</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-support-spring</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-jpa</artifactId>
+            <artifactId>camel-quarkus-support-spring-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
+            <artifactId>spring-beans</artifactId>
+            <scope>runtime</scope>
         </dependency>
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.camel.quarkus</groupId>
-                <artifactId>camel-quarkus-maven-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>update-extension-doc-page</id>
-                        <goals><goal>update-extension-doc-page</goal></goals>
-                        <phase>process-classes</phase>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <createSourcesJar>true</createSourcesJar>
+                            <artifactSet>
+                                <includes>
+                                    
<include>org.springframework:spring-beans</include>
+                                </includes>
+                            </artifactSet>
+                            <filters>
+                                <filter>
+                                    
<artifact>org.springframework:spring-beans</artifact>
+                                    <includes>
+                                        
<include>META-INF/spring.factories</include>
+                                        
<include>org/springframework/beans/*</include>
+                                        
<include>org/springframework/beans/factory/**</include>
+                                        
<include>org/springframework/beans/propertyeditors/**</include>
+                                        
<include>org/springframework/beans/support/**</include>
+                                    </includes>
+                                    <excludes>
+                                        
<exclude>org/springframework/beans/factory/groovy/**</exclude>
+                                    </excludes>
+                                </filter>
+                            </filters>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>
-            <plugin>
-                <groupId>io.quarkus</groupId>
-                <artifactId>quarkus-bootstrap-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <annotationProcessorPaths>
-                        <path>
-                            <groupId>io.quarkus</groupId>
-                            
<artifactId>quarkus-extension-processor</artifactId>
-                            <version>${quarkus.version}</version>
-                        </path>
-                    </annotationProcessorPaths>
-                </configuration>
-            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/extensions/jpa/runtime/pom.xml 
b/extensions-support/spring/context/pom.xml
similarity index 50%
copy from extensions/jpa/runtime/pom.xml
copy to extensions-support/spring/context/pom.xml
index 6f069d1..038e2ff 100644
--- a/extensions/jpa/runtime/pom.xml
+++ b/extensions-support/spring/context/pom.xml
@@ -18,22 +18,15 @@
 
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-    <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-jpa-parent</artifactId>
+        <artifactId>camel-quarkus-support-spring-parent</artifactId>
         <version>1.4.0-SNAPSHOT</version>
-        <relativePath>../pom.xml</relativePath>
     </parent>
+    <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>camel-quarkus-jpa</artifactId>
-    <name>Camel Quarkus :: JPA :: Runtime</name>
-    <description>Store and retrieve Java objects from databases using Java 
Persistence API (JPA).</description>
-
-    <properties>
-        <camel.quarkus.jvmSince>1.0.0</camel.quarkus.jvmSince>
-        <camel.quarkus.nativeSince>1.0.0</camel.quarkus.nativeSince>
-    </properties>
+    <artifactId>camel-quarkus-support-spring-context</artifactId>
+    <name>Camel Quarkus :: Support :: Spring :: Context</name>
 
     <dependencyManagement>
         <dependencies>
@@ -49,57 +42,58 @@
 
     <dependencies>
         <dependency>
-            <groupId>io.quarkus</groupId>
-            <artifactId>quarkus-hibernate-orm</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core</artifactId>
+            <artifactId>camel-quarkus-support-spring-beans</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-support-spring</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-jpa</artifactId>
+            <artifactId>camel-quarkus-support-spring-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context</artifactId>
+            <scope>runtime</scope>
         </dependency>
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.camel.quarkus</groupId>
-                <artifactId>camel-quarkus-maven-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>update-extension-doc-page</id>
-                        <goals><goal>update-extension-doc-page</goal></goals>
-                        <phase>process-classes</phase>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <createSourcesJar>true</createSourcesJar>
+                            <artifactSet>
+                                <includes>
+                                    
<include>org.springframework:spring-context</include>
+                                </includes>
+                            </artifactSet>
+                            <filters>
+                                <filter>
+                                    
<artifact>org.springframework:spring-context</artifact>
+                                    <includes>
+                                        
<include>org/springframework/context/*</include>
+                                        
<include>org/springframework/context/event/**</include>
+                                        
<include>org/springframework/context/expression/**</include>
+                                        
<include>org/springframework/context/support/**</include>
+                                        
<include>org/springframework/context/weaving/**</include>
+                                        
<include>org/springframework/jndi/JndiCallback**</include>
+                                        
<include>org/springframework/jndi/JndiTemplate.**</include>
+                                        
<include>org/springframework/jndi/TypeMismatchNamingException**</include>
+                                        
<include>org/springframework/scheduling/**</include>
+                                    </includes>
+                                </filter>
+                            </filters>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>
-            <plugin>
-                <groupId>io.quarkus</groupId>
-                <artifactId>quarkus-bootstrap-maven-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-compiler-plugin</artifactId>
-                <configuration>
-                    <annotationProcessorPaths>
-                        <path>
-                            <groupId>io.quarkus</groupId>
-                            
<artifactId>quarkus-extension-processor</artifactId>
-                            <version>${quarkus.version}</version>
-                        </path>
-                    </annotationProcessorPaths>
-                </configuration>
-            </plugin>
         </plugins>
     </build>
 </project>
diff --git a/extensions-support/spring/core/pom.xml 
b/extensions-support/spring/core/pom.xml
new file mode 100644
index 0000000..80ca41d
--- /dev/null
+++ b/extensions-support/spring/core/pom.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <parent>
+        <groupId>org.apache.camel.quarkus</groupId>
+        <artifactId>camel-quarkus-support-spring-parent</artifactId>
+        <version>1.4.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>camel-quarkus-support-spring-core</artifactId>
+    <name>Camel Quarkus :: Support :: Spring :: Core</name>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-bom</artifactId>
+                <version>${project.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <createSourcesJar>true</createSourcesJar>
+                            <artifactSet>
+                                <includes>
+                                    
<include>org.springframework:spring-core</include>
+                                </includes>
+                            </artifactSet>
+                            <filters>
+                                <filter>
+                                    
<artifact>org.springframework:spring-core</artifact>
+                                    <includes>
+                                        
<include>org/springframework/asm/**</include>
+                                        
<include>org/springframework/core/*</include>
+                                        
<include>org/springframework/core/annotation/**</include>
+                                        
<include>org/springframework/core/convert/**</include>
+                                        
<include>org/springframework/core/env/**</include>
+                                        
<include>org/springframework/core/io/**</include>
+                                        
<include>org/springframework/core/log/**</include>
+                                        
<include>org/springframework/core/task/**</include>
+                                        
<include>org/springframework/lang/**</include>
+                                        
<include>org/springframework/util/*</include>
+                                        
<include>org/springframework/util/backoff/**</include>
+                                        
<include>org/springframework/util/concurrent/**</include>
+                                        
<include>org/springframework/util/comparator/**</include>
+                                        
<include>org/springframework/util/function/**</include>
+                                        
<include>org/springframework/util/xml/**</include>
+                                    </includes>
+                                </filter>
+                            </filters>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git a/extensions-support/spring/integration-test/pom.xml 
b/extensions-support/spring/integration-test/pom.xml
new file mode 100644
index 0000000..fe56b5c
--- /dev/null
+++ b/extensions-support/spring/integration-test/pom.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <groupId>org.apache.camel.quarkus</groupId>
+    <artifactId>camel-quarkus-build-parent-it</artifactId>
+    <version>1.4.0-SNAPSHOT</version>
+    <relativePath>../../../poms/build-parent-it/pom.xml</relativePath>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>camel-quarkus-support-spring-integration-test</artifactId>
+  <name>Camel Quarkus :: Support Spring :: Integration Test</name>
+  <description>Integration tests for Camel Quarkus Support Spring 
extension</description>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.apache.camel.quarkus</groupId>
+        <artifactId>camel-quarkus-bom-test</artifactId>
+        <version>${project.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.camel.quarkus</groupId>
+      <artifactId>camel-quarkus-support-spring</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-spring-di</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-resteasy</artifactId>
+    </dependency>
+
+    <!-- test dependencies -->
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-junit5</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>io.rest-assured</groupId>
+      <artifactId>rest-assured</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <!-- The following dependencies guarantee that this module is built after 
them. You can update them by running `mvn process-resources -Pformat -N` from 
the source tree root directory -->
+    <dependency>
+      <groupId>org.apache.camel.quarkus</groupId>
+      <artifactId>camel-quarkus-support-spring-deployment</artifactId>
+      <version>${project.version}</version>
+      <type>pom</type>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>*</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>io.quarkus</groupId>
+        <artifactId>quarkus-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>build</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  
+</project>
diff --git 
a/extensions-support/spring/integration-test/src/main/java/org/apache/camel/quarkus/support/spring/ClassLoadingService.java
 
b/extensions-support/spring/integration-test/src/main/java/org/apache/camel/quarkus/support/spring/ClassLoadingService.java
new file mode 100644
index 0000000..14b0cff
--- /dev/null
+++ 
b/extensions-support/spring/integration-test/src/main/java/org/apache/camel/quarkus/support/spring/ClassLoadingService.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.support.spring;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+@Path("/classloading")
+public class ClassLoadingService {
+
+    @GET
+    @Path("/{className}")
+    public void loadClass(@PathParam("className") String className) throws 
ClassNotFoundException {
+        Thread.currentThread().getContextClassLoader().loadClass(className);
+    }
+}
diff --git 
a/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java
 
b/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java
new file mode 100644
index 0000000..e1c43d7
--- /dev/null
+++ 
b/extensions-support/spring/integration-test/src/test/java/org/apache/camel/quarkus/support/spring/test/SpringSupportTest.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.support.spring.test;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+public class SpringSupportTest {
+
+    @Test
+    public void springClassLoading() {
+        // Verify that classes excluded by the Quarkus Spring extensions can 
be loaded
+        // I.e check they are not blacklisted since the 
camel-quarkus-support-spring-(beans,context,core) jars will provide them
+        String[] classNames = new String[] {
+                // From: org.springframework:spring-beans
+                "org.springframework.beans.factory.InitializingBean",
+                // From: org.springframework:spring-context
+                
"org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor",
+                // From: org.springframework:spring-core
+                "org.springframework.core.SpringVersion",
+        };
+
+        for (String className : classNames) {
+            RestAssured.given()
+                    .pathParam("className", className)
+                    .when()
+                    .get("/classloading/{className}")
+                    .then()
+                    .statusCode(204);
+        }
+    }
+}
diff --git a/extensions-support/spring/pom.xml 
b/extensions-support/spring/pom.xml
index 5ff5b6c..1a261a3 100644
--- a/extensions-support/spring/pom.xml
+++ b/extensions-support/spring/pom.xml
@@ -33,8 +33,12 @@
     <packaging>pom</packaging>
 
     <modules>
+        <module>beans</module>
+        <module>context</module>
+        <module>core</module>
         <module>deployment</module>
         <module>runtime</module>
+        <module>integration-test</module>
     </modules>
 
 </project>
diff --git a/extensions-support/spring/runtime/pom.xml 
b/extensions-support/spring/runtime/pom.xml
index e51eb8e..1c9dc0a 100644
--- a/extensions-support/spring/runtime/pom.xml
+++ b/extensions-support/spring/runtime/pom.xml
@@ -50,8 +50,16 @@
             <artifactId>camel-quarkus-support-commons-logging</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-support-spring-beans</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-support-spring-context</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-support-spring-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.graalvm.nativeimage</groupId>
diff --git a/extensions/jpa/runtime/pom.xml b/extensions/jpa/runtime/pom.xml
index 6f069d1..9ab8db6 100644
--- a/extensions/jpa/runtime/pom.xml
+++ b/extensions/jpa/runtime/pom.xml
@@ -64,10 +64,6 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-jpa</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-context</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/pom.xml b/pom.xml
index 87ba6ce..fcbae41 100644
--- a/pom.xml
+++ b/pom.xml
@@ -144,6 +144,7 @@
         <maven-source-plugin.version>3.1.0</maven-source-plugin.version>
         <maven-release-plugin.version>2.5.3</maven-release-plugin.version>
         <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
+        <maven-shade-plugin.version>3.2.4</maven-shade-plugin.version>
         <!-- NOTE: We pin to this version due to 
https://github.com/apache/camel-quarkus/issues/723 -->
         <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
         <os-maven-plugin.version>1.6.2</os-maven-plugin.version>
@@ -311,6 +312,12 @@
 
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-shade-plugin</artifactId>
+                    <version>${maven-shade-plugin.version}</version>
+                </plugin>
+
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-surefire-plugin</artifactId>
                     <version>${maven-surefire-plugin.version}</version>
                     <configuration>
diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml
index f48fb2e..b33bdd3 100644
--- a/poms/bom/pom.xml
+++ b/poms/bom/pom.xml
@@ -1113,6 +1113,16 @@
                 <groupId>org.apache.camel</groupId>
                 <artifactId>camel-jdbc</artifactId>
                 <version>${camel.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-beans</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-core</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
                 <groupId>org.apache.camel</groupId>
@@ -1165,6 +1175,18 @@
                         <groupId>org.apache.camel</groupId>
                         <artifactId>camel-spring</artifactId>
                     </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-beans</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-context</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-core</artifactId>
+                    </exclusion>
                 </exclusions>
             </dependency>
             <dependency>
@@ -1191,6 +1213,18 @@
                         <groupId>org.apache.camel</groupId>
                         <artifactId>camel-spring</artifactId>
                     </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-beans</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-context</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-core</artifactId>
+                    </exclusion>
                 </exclusions>
             </dependency>
             <dependency>
@@ -1771,6 +1805,14 @@
                         <groupId>commons-logging</groupId>
                         <artifactId>commons-logging</artifactId>
                     </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-beans</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.springframework</groupId>
+                        <artifactId>spring-core</artifactId>
+                    </exclusion>
                 </exclusions>
             </dependency>
             <dependency>
@@ -4787,6 +4829,21 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-support-spring-beans</artifactId>
+                <version>${camel-quarkus.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-support-spring-context</artifactId>
+                <version>${camel-quarkus.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
+                <artifactId>camel-quarkus-support-spring-core</artifactId>
+                <version>${camel-quarkus.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel.quarkus</groupId>
                 
<artifactId>camel-quarkus-support-spring-deployment</artifactId>
                 <version>${camel-quarkus.version}</version>
             </dependency>

Reply via email to