Skip to content

Commit 1f9e6f5

Browse files
committed
fix: add java env setup doc and shell script
1 parent a9c3b23 commit 1f9e6f5

126 files changed

Lines changed: 192 additions & 255 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lang/java/java_env_setup_README.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Java 解析环境搭建指南
2+
3+
本文档将指导您如何配置本地环境以使用 `abcoder` 的 Java 解析功能。
4+
5+
为了成功解析 Java 项目,`abcoder` 依赖于以下两个核心组件:
6+
1. **Java 运行环境 (JRE)**: 版本需要 **17 或更高**
7+
2. **Eclipse JDT Language Server**: 一个用于代码分析的语言服务器。
8+
9+
我们提供了一个自动化脚本来简化安装过程,同时也支持手动配置以满足个性化需求。
10+
11+
## 1. 快速开始 (推荐)
12+
13+
我们强烈建议您使用提供的脚本来自动完成环境的搭建。
14+
15+
### 步骤 1: 授予脚本执行权限
16+
17+
在项目根目录下,执行以下命令:
18+
19+
```bash
20+
chmod +x lang/java/lsp/setup_java_env.sh
21+
```
22+
23+
### 步骤 2: 运行设置脚本
24+
25+
执行此脚本会自动检查您的 Java 版本、下载并解压 JDT Language Server,并为当前终端会话设置必要的环境变量 (`LAUNCHER_JAR``JDTLS_ROOT_PATH`)。
26+
27+
**重要**: 您需要使用 `source` 命令来执行脚本,以确保环境变量在当前会话中生效。
28+
29+
```bash
30+
source lang/java/lsp/setup_java_env.sh
31+
```
32+
33+
脚本执行成功后,您的环境就准备就绪了。
34+
35+
## 2. 运行 Java 解析器
36+
37+
环境配置完成后,您可以使用 `parse` 命令来解析您的 Java 项目。
38+
39+
### 命令格式
40+
41+
```bash
42+
go run . parse java <待解析的Java项目路径> -o <输出的JSON文件路径>
43+
```
44+
45+
### 示例
46+
47+
例如,解析位于 `/Users/bytedance/Documents/code/travel-auth` 的项目,并将结果输出到 `testdata/tmp/java.json`
48+
49+
```bash
50+
go run . parse java /Users/bytedance/Documents/code/travel-auth -o /Users/bytedance/GolandProjects/abcoder/testdata/tmp/java.json
51+
```
52+
53+
## 3. 手动配置与自定义 (高级)
54+
55+
如果您希望使用自定义的 Java 安装或 JDT Language Server 路径,可以跳过自动化脚本,进行手动配置。
56+
57+
### a. 自定义 Java Home
58+
59+
如果您的 Java 17+ 安装在非标准路径,或者您希望明确指定一个 Java 版本,可以在执行 `parse` 命令时通过 `--java-home` 标志来指定。
60+
61+
```bash
62+
go run . parse java <项目路径> --java-home /path/to/your/java_home
63+
```
64+
65+
### b. 自定义 JDT Language Server 路径
66+
67+
如果您已经手动下载或在其他位置安装了 JDT Language Server,您只需在运行 `parse` 命令前,设置 `JDTLS_ROOT_PATH` 环境变量,使其指向 JDT Language Server 的根目录即可。
68+
69+
例如:
70+
71+
```bash
72+
# 设置环境变量
73+
export JDTLS_ROOT_PATH=/path/to/your/jdt-language-server-x.y.z
74+
75+
# 运行解析命令
76+
go run . parse java <项目路径> -o <输出路径>
77+
```
78+
79+
`abcoder` 会优先使用 `JDTLS_ROOT_PATH` 环境变量指定的路径来启动语言服务器。
80+
81+
---
82+
83+
现在,您可以根据自己的需求选择快速或手动方式来配置环境,并开始使用强大的 Java 解析功能了。

lang/java/lib.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ package java
1616

1717
import (
1818
"fmt"
19+
"github.com/cloudwego/abcoder/lang/log"
20+
"os"
1921
"path/filepath"
2022
"runtime"
2123
"strings"
@@ -27,19 +29,23 @@ import (
2729

2830
const MaxWaitDuration = 5 * time.Second
2931

30-
func GetDefaultLSP() (lang uniast.Language, name string) {
31-
32-
return uniast.Java, generateExecuteCmd()
32+
func GetDefaultLSP(LspOptions map[string]string) (lang uniast.Language, name string) {
33+
return uniast.Java, generateExecuteCmd(LspOptions)
3334
}
3435

35-
func generateExecuteCmd() string {
36+
func generateExecuteCmd(LspOptions map[string]string) string {
3637
// Get the absolute path to the current file
3738
_, currentFile, _, ok := runtime.Caller(0)
3839
if !ok {
3940
panic("Failed to get current file path")
4041
}
4142
javaDir := filepath.Dir(currentFile)
42-
jdtLsPath := filepath.Join(javaDir, "lsp", "jdtls", "jdt-language-server-1.39.0-202408291433", "plugins", "org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar")
43+
44+
jdtRootPATH := filepath.Join(javaDir, "lsp", "jdtls", "jdt-language-server-1.39.0-202408291433")
45+
if len(os.Getenv("JDTlS_ROOT_PATH")) != 0 {
46+
jdtRootPATH = os.Getenv("JDTlS_ROOT_PATH")
47+
}
48+
jdtLsPath := filepath.Join(jdtRootPATH, "plugins", "org.eclipse.equinox.launcher_1.6.900.v20240613-2009.jar")
4349
// Determine the configuration path based on OS and architecture
4450
var osName string
4551
switch runtime.GOOS {
@@ -54,7 +60,7 @@ func generateExecuteCmd() string {
5460
if runtime.GOARCH == "arm64" {
5561
configDir += "_arm"
5662
}
57-
configPath := filepath.Join(javaDir, "lsp", "jdtls", "jdt-language-server-1.39.0-202408291433", configDir)
63+
configPath := filepath.Join(jdtRootPATH, configDir)
5864
dataPath := filepath.Join(javaDir, "lsp", "jdtls", "runtime")
5965
args := []string{
6066
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
@@ -70,7 +76,14 @@ func generateExecuteCmd() string {
7076
"--add-opens java.base/java.util=ALL-UNNAMED",
7177
"--add-opens java.base/java.lang=ALL-UNNAMED",
7278
}
73-
return "java " + strings.Join(args, " ")
79+
javaCmd := "java "
80+
if len(LspOptions["java.home"]) != 0 {
81+
javaCmd = LspOptions["java.home"] + " "
82+
}
83+
join := strings.Join(args, " ")
84+
85+
log.Error(javaCmd + join)
86+
return javaCmd + strings.Join(args, " ")
7487
}
7588

7689
func CheckRepo(repo string) (string, time.Duration) {

lang/java/lsp/jdtls/jdt-language-server-1.39.0-202408291433/bin/jdtls

Lines changed: 0 additions & 18 deletions
This file was deleted.

lang/java/lsp/jdtls/jdt-language-server-1.39.0-202408291433/bin/jdtls.bat

Lines changed: 0 additions & 3 deletions
This file was deleted.

lang/java/lsp/jdtls/jdt-language-server-1.39.0-202408291433/bin/jdtls.py

Lines changed: 0 additions & 113 deletions
This file was deleted.

lang/java/lsp/jdtls/jdt-language-server-1.39.0-202408291433/config_linux/config.ini

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)