-
Notifications
You must be signed in to change notification settings - Fork 15
Home
kaiv2 edited this page May 27, 2025
·
4 revisions
#!/bin/bash
workdir=$(pwd)
project=$1
jdtls() {
# eclipse-jdtls
if [[ -d "eclipse.jdt.ls" ]]; then
echo "eclipse.jdt.ls already exists, skipping clone."
cd eclipse.jdt.ls
git pull
else
git clone https://github.com/eclipse-jdtls/eclipse.jdt.ls.git
cd eclipse.jdt.ls
fi
mvn clean verify -U -DskipTests -Declipse.jdt.ls.skipGradleChecksums
cd ${workdir}
echo "JDTLS_HOME=${workdir}/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository"
}
java_debug() {
# java-debug
if [[ -d "java-debug" ]]; then
echo "java-debug already exists, skipping clone."
cd java-debug
git pull
else
git clone https://github.com/microsoft/java-debug.git
cd java-debug
fi
mvn clean package -DskipTests
cd ${workdir}
echo "JDTLS_JAVA_DEBUG_PATH=${workdir}/java-debug/com.microsoft.java.debug.plugin/target/"
}
java_test() {
# java-test
if [[ -d "vscode-java-test" ]]; then
echo "vscode-java-test already exists, skipping clone."
cd vscode-java-test/java-extension
git pull
else
git clone https://github.com/microsoft/vscode-java-test.git
cd vscode-java-test/java-extension
fi
mvn clean package -DskipTests -Djdk.xml.totalEntitySizeLimit=1000000 -Djdk.xml.maxGeneralEntitySizeLimit=1000000
cd ..
# 删除 server 目录
rm -rf server
# 定义 serverDir 路径
serverDir=$(realpath "java-extension")
# 定义 bundle 列表
bundleList=(
"org.eclipse.jdt.junit4.runtime_"
"org.eclipse.jdt.junit5.runtime_"
"junit-jupiter-api"
"junit-jupiter-engine"
"junit-jupiter-migrationsupport"
"junit-jupiter-params"
"junit-vintage-engine"
"org.opentest4j"
"junit-platform-commons"
"junit-platform-engine"
"junit-platform-launcher"
"junit-platform-runner"
"junit-platform-suite-api"
"junit-platform-suite-commons"
"junit-platform-suite-engine"
"org.apiguardian.api"
"org.jacoco.core"
)
# 创建 server 目录
mkdir -p server
# 第一个 copy 操作 - 复制 .jar 文件
find "$serverDir/com.microsoft.java.test.plugin/target" -type f -name "*.jar" -exec cp {} server/ \;
# 第二个 copy 操作 - 复制特定 jar 文件
find "$serverDir/com.microsoft.java.test.runner/target" -type f -name "*jar-with-dependencies.jar" -exec cp {} server/ \;
# 第三个 copy 操作 - 复制 bundle 列表中的文件
for bundleName in "${bundleList[@]}"; do
find "$serverDir/com.microsoft.java.test.plugin.site/target/repository/plugins" -type f -name "$bundleName*" -exec cp {} server/ \;
done
cd ${workdir}
echo "JDTLS_JAVA_TEST_PATH=${workdir}/vscode-java-test/server"
}
java_dependency() {
# java-dependency
if [[ -d "vscode-java-dependency" ]]; then
echo "vscode-java-dependency already exists, skipping clone."
cd vscode-java-dependency/jdtls.ext
git pull
else
git clone https://github.com/microsoft/vscode-java-dependency.git
cd vscode-java-dependency/jdtls.ext
fi
mvn clean package -DskipTests -Djdk.xml.totalEntitySizeLimit=1000000 -Djdk.xml.maxGeneralEntitySizeLimit=1000000
cd ${workdir}
echo "JDTLS_JAVA_DEPENDENCY_PATH=${workdir}/vscode-java-dependency/jdtls.ext/com.microsoft.jdtls.ext.core/target"
}
java_decompiler() {
# java-decompiler
if [[ -d "vscode-java-decompiler" ]]; then
echo "vscode-java-decompiler already exists, skipping clone."
cd vscode-java-decompiler
git pull
else
git clone https://github.com/dgileadi/vscode-java-decompiler.git
fi
cd ${workdir}
echo "JDTLS_JAVA_DECOMPILER_PATH=${workdir}/vscode-java-decompiler/server"
}
lombok() {
# lombok jar
if [[ -f "lombok.jar" ]]; then
echo "lombok.jar already exists, skipping download."
else
curl -L -O https://projectlombok.org/downloads/lombok.jar
fi
}
spring_tools() {
# spring-tools
if [[ -d "spring-tools" ]]; then
echo "spring-tools already exists, skipping clone."
cd spring-tools/headless-services
git pull
else
git clone https://github.com/spring-projects/spring-tools.git
cd spring-tools/headless-services
fi
modules=spring-boot-language-server,sts-gradle-model-plugin,:org.springframework.tooling.gradle,:org.springframework.tooling.jdt.ls.extension,:org.springframework.tooling.jdt.ls.commons,:org.springframework.tooling.jdt.ls.commons.test
mvn \
-DtrimStackTrace=false \
-DskipTests \
-Djdk.xml.totalEntitySizeLimit=1000000 \
-Djdk.xml.maxGeneralEntitySizeLimit=1000000 \
-f pom.xml \
-pl $modules \
-am \
-B \
clean install
# Clean old jars
rm -fr ${workdir}/spring-tools/jars
mkdir -p ${workdir}/spring-tools/jars
#Clean old LS folder
rm -fr ${workdir}/spring-tools/language-server
mkdir -p ${workdir}/spring-tools/language-server
# Extract LS JAR
cd ${workdir}/spring-tools/headless-services/spring-boot-language-server/target
server_jar_file=$(find . -name '*-exec.jar');
java -Djarmode=tools -jar $server_jar_file extract --destination ${workdir}/spring-tools/language-server
# JDT LS Extension
cd ${workdir}/spring-tools/headless-services/jdt-ls-extension
find . -name "*-sources.jar" -delete
cp org.springframework.tooling.jdt.ls.extension/target/*.jar ${workdir}/spring-tools/jars/jdt-ls-extension.jar
cp org.springframework.tooling.jdt.ls.commons/target/*.jar ${workdir}/spring-tools/jars/jdt-ls-commons.jar
cp org.springframework.tooling.gradle/target/*.jar ${workdir}/spring-tools/jars/sts-gradle-tooling.jar
# Copy Reactor dependency bundles
cp org.springframework.tooling.jdt.ls.commons/target/dependencies/io.projectreactor.reactor-core.jar ${workdir}/spring-tools/jars/
cp org.springframework.tooling.jdt.ls.commons/target/dependencies/org.reactivestreams.reactive-streams.jar ${workdir}/spring-tools/jars/
cd ${workdir}
echo "JDTLS_SPRING_TOOLS_PATH=${workdir}/spring-tools"
}
case $project in
jdtls)
jdtls
;;
java-debug)
java_debug
;;
java-test)
java_test
;;
java-dependency)
java_dependency
;;
java-decompiler)
java_decompiler
;;
spring-tools)
spring_tools
;;
lombok)
lombok
;;
all)
jdtls
java_debug
java_test
java_dependency
java_decompiler
spring_tools
lombok
;;
env)
echo "JDTLS_HOME=${workdir}/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository"
echo "JDTLS_JAVA_DEBUG_PATH=${workdir}/java-debug/com.microsoft.java.debug.plugin/target/"
echo "JDTLS_JAVA_TEST_PATH=${workdir}/vscode-java-test/server"
echo "JDTLS_JAVA_DEPENDENCY_PATH=${workdir}/vscode-java-dependency/jdtls.ext/com.microsoft.jdtls.ext.core/target"
echo "JDTLS_JAVA_DECOMPILER_PATH=${workdir}/vscode-java-decompiler/server"
echo "JDTLS_SPRING_TOOLS_PATH=${workdir}/spring-tools"
;;
*)
echo "Usage: $0 {jdtls|java-debug|java-test|java-dependency|java-decompiler|spring-tools|lombok|all|env}"
esac