diff --git a/.gitignore b/.gitignore index f0c5b601e9..0801dfe947 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ website/versioned_docs website/versioned_sidebars website/versions.json website/pnpm-lock.yaml +website/static/javadoc diff --git a/pom.xml b/pom.xml index 9ae2a7527a..16ebed5021 100644 --- a/pom.xml +++ b/pom.xml @@ -945,9 +945,7 @@ - - diff --git a/website/build_javadocs.sh b/website/build_javadocs.sh new file mode 100755 index 0000000000..59ec37ce64 --- /dev/null +++ b/website/build_javadocs.sh @@ -0,0 +1,181 @@ +#!/usr/bin/env bash +# +# 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. +# + +set -e + +# Find project root directory +SCRIPT_PATH=$(cd "$(dirname "$0")" && pwd) +cd "$SCRIPT_PATH" + +# Navigate to project root by looking for pom.xml +while [[ ! -f "pom.xml" && "$(pwd)" != "/" ]]; do + cd .. +done + +# Validate we found the project root +if [[ ! -f "pom.xml" ]]; then + echo "Error: Could not find project root with pom.xml" + exit 1 +fi + +echo "Found project root: $(pwd)" + +# Extract version from Maven project +VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout 2>/dev/null || mvn help:evaluate -Dexpression=project.version -q -DforceStdout) +if [[ -z "$VERSION" ]]; then + echo "Error: Could not extract project version" + exit 1 +fi + +# Get current branch name for version determination +CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown") +echo "Current branch: $CURRENT_BRANCH" + +# Determine javadoc version based on branch type +if [[ "$CURRENT_BRANCH" == "main" ]]; then + JAVADOC_VERSION="main" +elif [[ "$CURRENT_BRANCH" =~ ^release-([0-9]+\.[0-9]+)$ ]]; then + JAVADOC_VERSION="${BASH_REMATCH[1]}" +else + # For feature branches or other branches, use sanitized branch name + JAVADOC_VERSION=$(echo "$CURRENT_BRANCH" | sed 's/[^a-zA-Z0-9._-]/_/g') +fi + +# Setup output directory +OUTPUT_DIR="website/static/javadoc/$JAVADOC_VERSION" +echo "Generating Javadoc for version: $JAVADOC_VERSION" +echo "Output directory: $OUTPUT_DIR" + +# Create output directory +rm -rf "$OUTPUT_DIR" +mkdir -p "$OUTPUT_DIR" + +# Create temporary POM for targeted javadoc generation +TEMP_POM="temp-javadoc-pom.xml" +cat > "$TEMP_POM" << EOF + + + 4.0.0 + + org.apache.fluss + fluss-javadoc-temp + $VERSION + pom + + + 11 + 11 + UTF-8 + + + + fluss-client + fluss-flink/fluss-flink-common + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.6.3 + + Apache Fluss \${project.version} API + Apache Fluss \${project.version} API + none + false + true + + --add-opens=java.base/java.lang=ALL-UNNAMED + -J--add-exports=java.rmi/sun.rmi.registry=ALL-UNNAMED + + + + + + +EOF + +# Cleanup function for temporary files +cleanup() { + if [[ -f "$TEMP_POM" ]]; then + rm -f "$TEMP_POM" + echo "Cleaned up temporary POM file" + fi +} + +# Set trap for cleanup on script exit +trap cleanup EXIT + +# Set Maven options for Java 11+ compatibility +export MAVEN_OPTS="--add-exports=java.rmi/sun.rmi.registry=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED" + +echo "Building and generating Javadoc..." + +# Build and generate javadoc using temporary POM +if (./mvnw -f "$TEMP_POM" clean compile javadoc:aggregate -q 2>/dev/null || mvn -f "$TEMP_POM" clean compile javadoc:aggregate -q); then + echo "Javadoc generation completed successfully" +else + echo "Error: Javadoc generation failed" + exit 1 +fi + +# Copy generated javadoc to output directory +if [[ -d "target/site/apidocs" ]]; then + cp -r target/site/apidocs/* "$OUTPUT_DIR/" + echo "Javadoc copied to: $OUTPUT_DIR" +else + echo "Error: No javadoc files generated in target/site/apidocs" + exit 1 +fi + +# Create or update redirect page +JAVADOC_INDEX="website/static/javadoc/index.html" +mkdir -p "website/static/javadoc" +cat > "$JAVADOC_INDEX" << EOF + + + + + + Apache Fluss API Documentation + + +

Redirecting to Apache Fluss ${JAVADOC_VERSION} API

+ + +EOF + +echo "Created redirect page: $JAVADOC_INDEX" + +# Verify generation success +PACKAGE_COUNT=$(find "$OUTPUT_DIR" -name "package-summary.html" 2>/dev/null | wc -l | tr -d ' ') +CLASS_COUNT=$(find "$OUTPUT_DIR" -name "*.html" -not -name "index*.html" -not -name "*-summary.html" 2>/dev/null | wc -l | tr -d ' ') + +echo "" +echo "Javadoc generation summary:" +echo " Version: $JAVADOC_VERSION" +echo " Packages: $PACKAGE_COUNT" +echo " Classes/Interfaces: $CLASS_COUNT" +echo " Location: $OUTPUT_DIR" +echo " Local URL: http://localhost:3000/javadoc/$JAVADOC_VERSION/" +echo "" +echo "Javadoc generation completed successfully!" \ No newline at end of file diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 08c66381d6..b410492d11 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -156,6 +156,7 @@ const config: Config = { {to: '/community/welcome', label: 'Community', position: 'left'}, {to: '/roadmap', label: 'Roadmap', position: 'left'}, {to: '/downloads', label: 'Downloads', position: 'left'}, + {to: '/javadoc', label: 'Javadocs', position: 'left', target: '_blank'}, { label: 'ASF', position: 'right', items: [ {to: 'https://www.apache.org/', label: 'Foundation'},