@@ -32,12 +32,18 @@ class Decompiler(private val project: Project) {
32
32
33
33
val dependencies2 = model.dependencyManagement.dependencies
34
34
35
- val dependencies = dependencies1 + dependencies2
35
+ var dependencies = dependencies1 + dependencies2
36
+
37
+ // 需要考虑moudle嵌套的情况
38
+ dependencies = resolveModules(projectBaseDir, model, dependencies as ArrayList <Dependency >)
36
39
37
40
dependencies.forEach { dependency ->
38
- if (dependency.version != null ) {
41
+ if (dependency.version != null ) {
39
42
// 直接用version的时候拼接的是${},解析实际的值替换才能获取真正的jar
40
- dependency.version = model.properties.getProperty(dependency.version.replace(" \$ {" , " " ).replace(" }" , " " ))
43
+ var properties = model.properties
44
+ dependency.version =
45
+ model.properties.getProperty(dependency.version.replace(" \$ {" , " " ).replace(" }" , " " ))
46
+ ? : dependency.version
41
47
val jarFile = resolveJarFileFromDependency(dependency)
42
48
if (jarFile != null && jarFile.exists()) {
43
49
mavenJars.add(jarFile)
@@ -51,15 +57,17 @@ class Decompiler(private val project: Project) {
51
57
fun getAllJars (): List <File > {
52
58
val projectBaseDir = project.basePath ? : return emptyList()
53
59
val libDir = File (" $projectBaseDir /lib" )
60
+ val libsDir = File (" $projectBaseDir /libs" )
54
61
55
62
val libJars = libDir.listFiles { _, name -> name.endsWith(" .jar" ) }?.toList() ? : emptyList()
63
+ val libsJars = libsDir.listFiles { _, name -> name.endsWith(" .jar" ) }?.toList() ? : emptyList()
56
64
57
65
val mavenJars = getMavenDependencies()
58
66
59
67
println (" JAR files in lib directory: ${libJars.map { it.name }} " )
60
68
println (" Maven JAR files: ${mavenJars.map { it.name }} " )
61
69
62
- return libJars + mavenJars
70
+ return libJars + libsJars + mavenJars
63
71
}
64
72
65
73
fun decompileJar (jarFile : File ) {
@@ -95,6 +103,34 @@ class Decompiler(private val project: Project) {
95
103
return File (mavenRepo, jarPath)
96
104
}
97
105
106
+ // 递归解析module的依赖
107
+ fun resolveModules (basePath : String , model : Model , dependencies : ArrayList <Dependency >): ArrayList <Dependency > {
108
+ val modules = model.modules
109
+ val mavenReader = MavenXpp3Reader ()
110
+ modules.forEach { module ->
111
+ val modulePath = " $basePath /$module "
112
+ val modulePomFile = File (" $modulePath /pom.xml" )
113
+ if (modulePomFile.exists()) {
114
+ val moduleModel: Model = FileReader (modulePomFile).use { reader ->
115
+ mavenReader.read(reader)
116
+ }
117
+ dependencies + = moduleModel.dependencies
118
+ dependencies.forEach { dependency ->
119
+ if (dependency.version != null ) {
120
+ // 直接用version的时候拼接的是${},解析实际的值替换才能获取真正的jar
121
+ dependency.version =
122
+ moduleModel.properties.getProperty(dependency.version.replace(" \$ {" , " " ).replace(" }" , " " ))
123
+ ? : dependency.version
124
+ }
125
+ }
126
+ if (moduleModel.modules.isNotEmpty()) {
127
+ resolveModules(modulePath, moduleModel, dependencies)
128
+ }
129
+ }
130
+ }
131
+ return dependencies
132
+ }
133
+
98
134
fun extractJarFile (jarFile : File , outputDir : File ) {
99
135
if (! outputDir.exists()) {
100
136
outputDir.mkdirs()
0 commit comments