This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new be46b9f9b8 Fixes #9297. Replace the shaded grpc & netty in
milvus-sdk-java with the Quarkus provided dependencies
be46b9f9b8 is described below
commit be46b9f9b8437cf3138fc36c774516a554ec3f66
Author: James Netherton <[email protected]>
AuthorDate: Fri Oct 9 11:55:16 2026 +0100
Fixes #9297. Replace the shaded grpc & netty in milvus-sdk-java with the
Quarkus provided dependencies
Add a camel-quarkus-milvus-client module that reverts the milvus-sdk-java
grpc & netty package relocations and strips the shaded classes, native
libraries, native-image configs and service files, so that
camel-quarkus-milvus can use the dependencies provided by
quarkus-grpc-common. This replaces the bytecode transformation previously
done in MilvusProcessor.
Co-authored-by: Claude Opus 5.5 <[email protected]>
---
extensions/milvus/client/pom.xml | 126 +++++++++++++++++++++
.../milvus/deployment/MilvusProcessor.java | 73 ++----------
extensions/milvus/pom.xml | 1 +
extensions/milvus/runtime/pom.xml | 11 ++
pom.xml | 1 +
poms/bom/pom.xml | 32 ++++++
poms/bom/src/main/generated/flattened-full-pom.xml | 32 ++++++
.../src/main/generated/flattened-reduced-pom.xml | 32 ++++++
.../generated/flattened-reduced-verbose-pom.xml | 32 ++++++
.../quarkus/maven/UpdateExtensionDocPageMojo.java | 4 +-
10 files changed, 277 insertions(+), 67 deletions(-)
diff --git a/extensions/milvus/client/pom.xml b/extensions/milvus/client/pom.xml
new file mode 100644
index 0000000000..bdb023ecd0
--- /dev/null
+++ b/extensions/milvus/client/pom.xml
@@ -0,0 +1,126 @@
+<?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">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-milvus-parent</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <artifactId>camel-quarkus-milvus-client</artifactId>
+ <name>Camel Quarkus :: Milvus :: Client</name>
+
+ <description>io.milvus:milvus-sdk-java with grpc & netty package
relocations reverted and associated classes stripped away
+ so that camel-quarkus-milvus can use the equivalent quarkus extensions
as a replacement</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>io.milvus</groupId>
+ <artifactId>milvus-sdk-java</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>transform-milvus-sdk-java</id>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <artifactSet>
+ <includes>
+
<include>io.milvus:milvus-sdk-java</include>
+ </includes>
+ </artifactSet>
+ <relocations>
+ <!-- The most specific patterns must come
first -->
+ <relocation>
+
<pattern>io.milvus.shaded.io.grpc.netty.shaded.io.grpc</pattern>
+ <shadedPattern>io.grpc</shadedPattern>
+ </relocation>
+ <relocation>
+
<pattern>io.milvus.shaded.io.grpc.netty.shaded.io.netty</pattern>
+ <shadedPattern>io.netty</shadedPattern>
+ </relocation>
+ <relocation>
+ <pattern>io.milvus.shaded.io.grpc</pattern>
+ <shadedPattern>io.grpc</shadedPattern>
+ </relocation>
+ </relocations>
+ <filters>
+ <filter>
+
<artifact>io.milvus:milvus-sdk-java</artifact>
+ <excludes>
+ <!--
+ Remove shaded grpc-netty-shaded
packages & native libraries.
+ Replaced by grpc-netty,
grpc-protobuf, grpc-stub & quarkus-netty.
+ -->
+ <exclude>io/milvus/shaded/**</exclude>
+ <exclude>META-INF/native/**</exclude>
+
<exclude>META-INF/native-image/**</exclude>
+
<exclude>META-INF/services/io.milvus.shaded.*</exclude>
+
<exclude>META-INF/services/reactor.blockhound.integration.BlockHoundIntegration</exclude>
+
<exclude>META-INF/io.netty.versions.properties</exclude>
+
<exclude>META-INF/maven/io.grpc/**</exclude>
+
<exclude>META-INF/maven/io.netty/**</exclude>
+ <exclude>META-INF/license/**</exclude>
+ </excludes>
+ </filter>
+ </filters>
+ <createSourcesJar>true</createSourcesJar>
+
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <executions>
+ <execution>
+ <!--
+ Quarkus resolves reactor modules to
target/classes, which would otherwise be empty.
+ Unpack the transformed jar so that the classes are
visible to the Jandex index.
+ -->
+ <id>unpack-transformed-milvus-sdk-java</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <phase>package</phase>
+ <configuration>
+ <target>
+ <unzip
src="${project.build.directory}/${project.build.finalName}.jar"
dest="${project.build.outputDirectory}" />
+ </target>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git
a/extensions/milvus/deployment/src/main/java/org/apache/camel/quarkus/component/milvus/deployment/MilvusProcessor.java
b/extensions/milvus/deployment/src/main/java/org/apache/camel/quarkus/component/milvus/deployment/MilvusProcessor.java
index dce0328658..18ab58ac55 100644
---
a/extensions/milvus/deployment/src/main/java/org/apache/camel/quarkus/component/milvus/deployment/MilvusProcessor.java
+++
b/extensions/milvus/deployment/src/main/java/org/apache/camel/quarkus/component/milvus/deployment/MilvusProcessor.java
@@ -16,80 +16,21 @@
*/
package org.apache.camel.quarkus.component.milvus.deployment;
-import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.BytecodeTransformerBuildItem;
-import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
+import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.commons.ClassRemapper;
-import org.objectweb.asm.commons.Remapper;
class MilvusProcessor {
-
- /**
- * Intercepts all Milvus SDK classes during the Quarkus build process to
perform
- * bytecode transformation. This ensures the SDK points to the correct
- * gRPC/Netty implementations, avoiding 'Class Not Found'
- */
+ private static final String FEATURE = "camel-milvus";
@BuildStep
- void relocateAllShadedCalls(
- CombinedIndexBuildItem index,
- BuildProducer<BytecodeTransformerBuildItem> transformers) {
-
- index.getIndex().getKnownClasses().stream()
- .filter(ci -> {
- String name = ci.name().toString();
- return name.startsWith("io.milvus") &&
!name.startsWith("io.milvus.shaded");
- })
- .forEach(ci -> {
- transformers.produce(new BytecodeTransformerBuildItem(
- ci.name().toString(),
- (name, cv) -> new ShadedRelocationVisitor(cv)));
- });
+ FeatureBuildItem feature() {
+ return new FeatureBuildItem(FEATURE);
}
- //This build step ensures that the Milvus Java SDK is indexed by Jandex.
-
@BuildStep
- IndexDependencyBuildItem indexDependencie() {
- return new IndexDependencyBuildItem("io.milvus", "milvus-sdk-java");
- }
-
- /**
- * Custom ClassRemapper used during the Quarkus build step to intercept and
- * redirect shaded Netty/gRPC calls within the Milvus SDK.
- */
-
- private static class ShadedRelocationVisitor extends ClassRemapper {
- public ShadedRelocationVisitor(ClassVisitor cv) {
- super(Opcodes.ASM9, cv, new Remapper(Opcodes.ASM9) {
- @Override
- public String map(String internalName) {
- if (internalName == null)
- return null;
-
- if
(internalName.startsWith("io/milvus/shaded/io/grpc/netty/shaded/io/grpc")) {
- return
internalName.replace("io/milvus/shaded/io/grpc/netty/shaded/io/grpc",
"io/grpc");
- }
- if
(internalName.startsWith("io/milvus/shaded/io/grpc/netty/shaded/io/netty")) {
- return
internalName.replace("io/milvus/shaded/io/grpc/netty/shaded/io/netty",
"io/netty");
- }
- if (internalName.startsWith("io/milvus/shaded/io/grpc")) {
- return
internalName.replace("io/milvus/shaded/io/grpc", "io/grpc");
- }
- if
(internalName.startsWith("io/grpc/netty/shaded/io/grpc")) {
- return
internalName.replace("io/grpc/netty/shaded/io/grpc", "io/grpc");
- }
- if
(internalName.startsWith("io/grpc/netty/shaded/io/netty")) {
- return
internalName.replace("io/grpc/netty/shaded/io/netty", "io/netty");
- }
- return super.map(internalName);
- }
- });
- }
+ IndexDependencyBuildItem indexDependencies() {
+ // Enables quarkus-grpc-common to register the generated protobuf
message classes for reflection
+ return new IndexDependencyBuildItem("org.apache.camel.quarkus",
"camel-quarkus-milvus-client");
}
-
}
diff --git a/extensions/milvus/pom.xml b/extensions/milvus/pom.xml
index 27244eb61e..f44a73a8ad 100644
--- a/extensions/milvus/pom.xml
+++ b/extensions/milvus/pom.xml
@@ -31,6 +31,7 @@
<packaging>pom</packaging>
<modules>
+ <module>client</module>
<module>deployment</module>
<module>runtime</module>
</modules>
diff --git a/extensions/milvus/runtime/pom.xml
b/extensions/milvus/runtime/pom.xml
index a2c338944c..b2f58bd395 100644
--- a/extensions/milvus/runtime/pom.xml
+++ b/extensions/milvus/runtime/pom.xml
@@ -36,6 +36,10 @@
</properties>
<dependencies>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-milvus-client</artifactId>
+ </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-core</artifactId>
@@ -47,6 +51,13 @@
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-milvus</artifactId>
+ <exclusions>
+ <!-- replaced by camel-quarkus-milvus-client -->
+ <exclusion>
+ <groupId>io.milvus</groupId>
+ <artifactId>milvus-sdk-java</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
</dependencies>
diff --git a/pom.xml b/pom.xml
index 9c8f188487..451387d037 100644
--- a/pom.xml
+++ b/pom.xml
@@ -149,6 +149,7 @@
<mapstruct.version>${mapstruct-version}</mapstruct.version>
<mbassador.version>1.3.0</mbassador.version><!-- @sync
com.hierynomus:smbj:${smbj-version} dep:net.engio:mbassador -->
<micrometer-tracing.version>1.7.1</micrometer-tracing.version><!-- Not
in quarkus-bom yet, align with micrometer version in
io.quarkus:quarkus-bom:${quarkus.version} - tracing 1.6.x matches core 1.16.x
https://repo1.maven.org/maven2/io/micrometer/micrometer-tracing-bom/ -->
+
<milvus-sdk-java.version>${milvus-client-version}</milvus-sdk-java.version>
<mina.version>${mina-version}</mina.version>
<minio.version>9.0.3</minio.version><!-- @sync
io.quarkiverse.minio:quarkus-minio-parent:${quarkiverse-minio.version}
prop:minio.version -->
<msal4j.version>1.23.1</msal4j.version><!-- @sync
com.azure:azure-identity:${azure-identity.version}
dep:com.microsoft.azure:msal4j -->
diff --git a/poms/bom/pom.xml b/poms/bom/pom.xml
index 1ce777f0df..c7cf80a6cd 100644
--- a/poms/bom/pom.xml
+++ b/poms/bom/pom.xml
@@ -5735,6 +5735,11 @@
<artifactId>camel-quarkus-milvus</artifactId>
<version>${camel-quarkus.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-milvus-client</artifactId>
+ <version>${camel-quarkus.version}</version>
+ </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-milvus-deployment</artifactId>
@@ -7839,6 +7844,33 @@
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>${micrometer-tracing.version}</version>
</dependency>
+ <dependency>
+ <groupId>io.milvus</groupId>
+ <artifactId>milvus-sdk-java</artifactId>
+ <version>${milvus-sdk-java.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.android</groupId>
+ <artifactId>annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>animal-sniffer-annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib-common</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
diff --git a/poms/bom/src/main/generated/flattened-full-pom.xml
b/poms/bom/src/main/generated/flattened-full-pom.xml
index a39f0cc320..739942a918 100644
--- a/poms/bom/src/main/generated/flattened-full-pom.xml
+++ b/poms/bom/src/main/generated/flattened-full-pom.xml
@@ -5640,6 +5640,11 @@
<artifactId>camel-quarkus-milvus</artifactId>
<version>4.0.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-milvus-client</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-milvus-deployment</artifactId>
@@ -7741,6 +7746,33 @@
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.7.1</version>
</dependency>
+ <dependency>
+ <groupId>io.milvus</groupId>
+ <artifactId>milvus-sdk-java</artifactId>
+ <version>2.6.22</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.android</groupId>
+ <artifactId>annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>animal-sniffer-annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib-common</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
diff --git a/poms/bom/src/main/generated/flattened-reduced-pom.xml
b/poms/bom/src/main/generated/flattened-reduced-pom.xml
index 1686f623fb..2b99d2eb4e 100644
--- a/poms/bom/src/main/generated/flattened-reduced-pom.xml
+++ b/poms/bom/src/main/generated/flattened-reduced-pom.xml
@@ -924,6 +924,33 @@
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.7.1</version>
</dependency>
+ <dependency>
+ <groupId>io.milvus</groupId>
+ <artifactId>milvus-sdk-java</artifactId>
+ <version>2.6.22</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.android</groupId>
+ <artifactId>annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>animal-sniffer-annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib-common</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
@@ -6998,6 +7025,11 @@
<artifactId>camel-quarkus-milvus</artifactId>
<version>4.0.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-milvus-client</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-milvus-deployment</artifactId>
diff --git a/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml
b/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml
index a6b1cb1fd8..165df81b16 100644
--- a/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml
+++ b/poms/bom/src/main/generated/flattened-reduced-verbose-pom.xml
@@ -924,6 +924,33 @@
<artifactId>micrometer-tracing-bridge-otel</artifactId>
<version>1.7.1</version>
</dependency>
+ <dependency>
+ <groupId>io.milvus</groupId>
+ <artifactId>milvus-sdk-java</artifactId>
+ <version>2.6.22</version>
+ <exclusions>
+ <exclusion>
+ <groupId>com.google.android</groupId>
+ <artifactId>annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.google.code.findbugs</groupId>
+ <artifactId>jsr305</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.checkerframework</groupId>
+ <artifactId>checker-qual</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>animal-sniffer-annotations</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib-common</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
@@ -6998,6 +7025,11 @@
<artifactId>camel-quarkus-milvus</artifactId>
<version>4.0.0-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel.quarkus</groupId>
+ <artifactId>camel-quarkus-milvus-client</artifactId>
+ <version>4.0.0-SNAPSHOT</version>
+ </dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-milvus-deployment</artifactId>
diff --git
a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
index 07cc3609ca..4629a04fc6 100644
---
a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
+++
b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateExtensionDocPageMojo.java
@@ -389,7 +389,9 @@ public class UpdateExtensionDocPageMojo extends
AbstractDocGeneratorMojo {
}
for (Dependency dependency : dependencies) {
if ("org.apache.camel.quarkus".equals(dependency.getGroupId())
- && !dependency.getArtifactId().endsWith("-component")) {
+ && !dependency.getArtifactId().endsWith("-component")
+ // An extension's own client module (e.g.
camel-quarkus-kudu-client) has no deployment module
+ && !dependency.getArtifactId().equals(artifactId +
"-client")) {
final String depArtifactId = dependency.getArtifactId();
if (cache.computeIfAbsent(
depArtifactId,