Skip to content

Commit 8195506

Browse files
committed
feat(build): enhance module detection and filtering in native build script
1 parent c80fd2a commit 8195506

1 file changed

Lines changed: 25 additions & 3 deletions

File tree

bindings/python/build-native.sh

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,17 +130,39 @@ echo -e "${CYAN}🔍 Analyzing JARs to determine required modules (jdeps)...${NC
130130
# --multi-release 25: treat multi-release JARs as Java 25
131131
# Note: Filter out jboss/wildfly jars which often have broken module descriptors
132132
# Note: Do NOT use --class-path or --recursive to avoid resolving bad modules
133-
DETECTED_MODULES=$(find "$JARS_DIR" -name "*.jar" | grep -v "jboss" | grep -v "wildfly" | grep -v "smallrye" | xargs jdeps --print-module-deps --ignore-missing-deps --multi-release 25 | grep -v "Warning" | tr ',' '\n' | grep -v "Warning" | grep -v ":" | grep -v "/" | sort -u | paste -sd "," -)
133+
RAW_JDEPS_OUTPUT=$(find "$JARS_DIR" -name "*.jar" | grep -v "jboss" | grep -v "wildfly" | grep -v "smallrye" | xargs jdeps --print-module-deps --ignore-missing-deps --multi-release 25 2>&1 || true)
134+
DETECTED_MODULES=$(echo "$RAW_JDEPS_OUTPUT" | tr ',' '\n' | sed 's/^ *//;s/ *$//' | grep -E '^[a-zA-Z0-9_.]+$' | sort -u | paste -sd "," - || true)
135+
136+
JMODS_DIR="${JAVA_HOME}/jmods"
137+
if [ ! -d "$JMODS_DIR" ]; then
138+
JMODS_DIR="${JAVA_HOME}/lib/jmods"
139+
fi
140+
141+
if [ -d "$JMODS_DIR" ]; then
142+
AVAILABLE_MODULES=$(cd "$JMODS_DIR" && ls *.jmod 2> /dev/null | sed 's/\.jmod$//' | sort -u | paste -sd "|" -)
143+
if [ -n "$AVAILABLE_MODULES" ]; then
144+
FILTERED_MODULES=$(echo "$DETECTED_MODULES" | tr ',' '\n' | sed '/^$/d' | grep -E "^(${AVAILABLE_MODULES})$" | sort -u | paste -sd "," - || true)
145+
else
146+
FILTERED_MODULES="$DETECTED_MODULES"
147+
fi
148+
else
149+
FILTERED_MODULES="$DETECTED_MODULES"
150+
fi
134151

135152
# Manual overrides:
136153
# java.se: Stable baseline of standard Java SE modules needed by server/import/runtime paths
137154
# jdk.management: Required by server metrics integrations
138155
# jdk.zipfs: Required for JPype to load classes from JARs
139156
# jdk.unsupported: Often required for Unsafe access in libraries
140157
# jdk.incubator.vector: Required for vectorized execution paths
141-
REQUIRED_MODULES="${DETECTED_MODULES},java.se,jdk.management,jdk.zipfs,jdk.unsupported,jdk.incubator.vector"
158+
if [ -n "$FILTERED_MODULES" ]; then
159+
REQUIRED_MODULES="${FILTERED_MODULES},java.se,jdk.management,jdk.zipfs,jdk.unsupported,jdk.incubator.vector"
160+
else
161+
REQUIRED_MODULES="java.se,jdk.management,jdk.zipfs,jdk.unsupported,jdk.incubator.vector"
162+
fi
142163

143-
echo -e "${CYAN}📦 Detected modules: ${YELLOW}${DETECTED_MODULES}${NC}"
164+
echo -e "${CYAN}📦 Detected modules (raw): ${YELLOW}${DETECTED_MODULES}${NC}"
165+
echo -e "${CYAN}📦 Detected modules (filtered): ${YELLOW}${FILTERED_MODULES}${NC}"
144166
echo -e "${CYAN}📦 Final modules list: ${YELLOW}${REQUIRED_MODULES}${NC}"
145167

146168
rm -rf "$SCRIPT_DIR/temp_jre"

0 commit comments

Comments
 (0)