Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ssssssss-team
magic-api
提交
a9224abd
M
magic-api
项目概览
ssssssss-team
/
magic-api
9 个月 前同步成功
通知
41
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
magic-api
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a9224abd
编写于
3月 15, 2023
作者:
J
jmxd
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
代码提示支持JDK11+
上级
a5746567
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
39 addition
and
14 deletion
+39
-14
magic-api/src/main/java/org/ssssssss/magicapi/utils/ClassScanner.java
...c/main/java/org/ssssssss/magicapi/utils/ClassScanner.java
+39
-14
未找到文件。
magic-api/src/main/java/org/ssssssss/magicapi/utils/ClassScanner.java
浏览文件 @
a9224abd
package
org.ssssssss.magicapi.utils
;
import
org.springframework.core.io.Resource
;
import
org.springframework.core.io.support.PathMatchingResourcePatternResolver
;
import
org.springframework.core.io.support.ResourcePatternResolver
;
import
org.ssssssss.script.functions.ObjectConvertExtension
;
import
java.io.Closeable
;
...
...
@@ -11,6 +14,7 @@ import java.net.URISyntaxException;
import
java.net.URL
;
import
java.net.URLClassLoader
;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
import
java.util.zip.ZipEntry
;
import
java.util.zip.ZipInputStream
;
...
...
@@ -23,19 +27,44 @@ import java.util.zip.ZipInputStream;
*/
public
class
ClassScanner
{
public
static
List
<
String
>
scan
()
throws
URISyntaxException
{
ClassLoader
loader
=
Thread
.
currentThread
().
getContextClassLoader
();
public
static
List
<
String
>
scan
()
throws
URISyntaxException
,
IOException
{
Set
<
String
>
classes
=
new
HashSet
<>();
do
{
if
(
loader
instanceof
URLClassLoader
)
{
classes
.
addAll
(
scan
(((
URLClassLoader
)
loader
).
getURLs
()));
}
}
while
((
loader
=
loader
.
getParent
())
!=
null
);
if
(
Double
.
parseDouble
(
System
.
getProperty
(
"java.specification.version"
))
>=
11
)
{
classes
.
addAll
(
latestJdkScan
());
}
else
{
ClassLoader
loader
=
Thread
.
currentThread
().
getContextClassLoader
();
do
{
if
(
loader
instanceof
URLClassLoader
)
{
classes
.
addAll
(
scan
(((
URLClassLoader
)
loader
).
getURLs
()));
}
}
while
((
loader
=
loader
.
getParent
())
!=
null
);
}
classes
.
addAll
(
addJavaLibrary
());
return
new
ArrayList
<>(
classes
);
}
public
static
String
compress
(
List
<
String
>
classes
){
public
static
List
<
String
>
latestJdkScan
()
throws
IOException
{
ResourcePatternResolver
resourcePatternResolver
=
new
PathMatchingResourcePatternResolver
();
Resource
[]
resources
=
resourcePatternResolver
.
getResources
(
"classpath*:**/**.class"
);
return
Arrays
.
asList
(
resources
).
parallelStream
().
map
(
it
->
{
try
{
if
(
isClass
(
it
.
getURL
().
getPath
()))
{
if
(
"\"classes\""
.
contains
(
it
.
getURL
().
getPath
()))
{
return
it
.
getURL
().
getPath
().
split
(
"classes"
)[
1
].
substring
(
1
).
replace
(
".class"
,
""
).
replaceAll
(
"\\/"
,
"."
);
}
else
if
(
it
.
getURL
().
getPath
().
split
(
"!"
).
length
>
1
)
{
return
it
.
getURL
().
getPath
().
split
(
"!"
)[
1
].
substring
(
1
).
replace
(
".class"
,
""
).
replaceAll
(
"\\/"
,
"."
);
}
else
{
return
null
;
}
}
}
catch
(
IOException
e
)
{
return
null
;
}
return
null
;
}).
filter
(
Objects:
:
nonNull
).
distinct
().
sorted
(
Comparator
.
comparing
(
Objects:
:
toString
)).
collect
(
Collectors
.
toList
());
}
public
static
String
compress
(
List
<
String
>
classes
)
{
Collections
.
sort
(
classes
);
String
currentPackage
=
""
;
StringBuffer
buf
=
new
StringBuffer
();
...
...
@@ -48,7 +77,7 @@ public class ClassScanner {
className
=
fullName
.
substring
(
index
+
1
);
packageName
=
fullName
.
substring
(
0
,
index
);
}
if
(
className
.
equals
(
"package-info"
))
{
if
(
className
.
equals
(
"package-info"
))
{
continue
;
}
if
(
currentPackage
.
equals
(
packageName
))
{
...
...
@@ -59,7 +88,7 @@ public class ClassScanner {
classCount
++;
}
else
{
currentPackage
=
packageName
;
if
(
buf
.
length
()
>
0
)
{
if
(
buf
.
length
()
>
0
)
{
buf
.
append
(
"\n"
);
}
buf
.
append
(
packageName
);
...
...
@@ -201,8 +230,4 @@ public class ClassScanner {
private
static
boolean
isClass
(
String
className
)
{
return
className
.
endsWith
(
".class"
)
&&
!
className
.
contains
(
"$"
);
}
public
static
void
main
(
String
[]
args
)
throws
URISyntaxException
{
List
<
String
>
classes
=
scan
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录