Skip to content

Commit 3b93866

Browse files
committed
(1)ModuleApi gradle插件支持默认设置,默认srcDir "${project.projectDir.absolutePath}/src/main/api",destDir "${project.rootProject.projectDir.absolutePath}/api/src/main/api";
(2)添加通过全局配置文件.config/module-api.ag-conf设置ModuleApi相关配置;
1 parent 9919e41 commit 3b93866

File tree

5 files changed

+93
-46
lines changed

5 files changed

+93
-46
lines changed

.config/module-api.ag-conf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
moduleApi {
2+
srcDir "${project.projectDir.absolutePath}/src/main/api"
3+
destDir "${project.rootProject.projectDir.absolutePath}/api/src/main/api"
4+
5+
// makeApiRules "${project.projectDir.absolutePath}/src/main/api/*.api", "${project.projectDir.absolutePath}/src/main/api/*.java"
6+
logger {
7+
debug true
8+
toFile true
9+
printTag true
10+
path "$buildDir/outputs/logs/ag.log"
11+
}
12+
}

config.gradle

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
ext {
2020
buildConfig = [
21-
debug : false,
21+
debug : true,
2222
minSdkVersion : 15,
2323
targetSdkVersion : 25,
2424
versionCode : 1,
@@ -27,11 +27,8 @@ ext {
2727
buildToolsVersion : "25.0.2"
2828
]
2929

30-
agExtensionConfig = [
31-
version : '0.1.0'
32-
]
3330
bintrayConfig = [
34-
version : '0.1.0',
31+
version : '0.1.4',
3532
siteUrl : 'https://github.com/AlbieLiang/ModuleApi', // 项目的主页
3633
gitUrl : 'https://github.com/AlbieLiang/ModuleApi.git', // Git仓库的url
3734
licenseName : 'The Apache Software License, Version 2.0',
@@ -42,8 +39,8 @@ ext {
4239
]
4340

4441
libsDependencies = [
45-
arbitrarygen : 'cc.suitalk.tools:arbitrarygen:2.1.1',
46-
arbitrarygenSdk : 'cc.suitalk.tools:arbitrarygen-sdk:2.1.1',
47-
agGradlePlugin : 'cc.suitalk.tools:arbitrarygen-plugin:2.1.1',
42+
arbitrarygen : 'cc.suitalk.tools:arbitrarygen:2.1.2',
43+
arbitrarygenSdk : 'cc.suitalk.tools:arbitrarygen-sdk:2.1.2',
44+
agGradlePlugin : 'cc.suitalk.tools:arbitrarygen-plugin:2.1.2',
4845
]
4946
}

module-api-ag-extension/src/main/groovy/cc/suitalk/gradle/plugin/ModuleApiPlugin.groovy

Lines changed: 74 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import cc.suitalk.arbitrarygen.tools.RuntimeContextHelper
3030
import cc.suitalk.arbitrarygen.utils.FileOperation
3131
import cc.suitalk.arbitrarygen.utils.JSONArgsUtils
3232
import cc.suitalk.arbitrarygen.utils.Log
33+
import cc.suitalk.arbitrarygen.utils.Util
3334
import cc.suitalk.moduleapi.ag.extension.ModuleApiAGContextExtension
3435
import cc.suitalk.moduleapi.ag.extension.ModuleApiTaskProcessor
3536
import groovy.json.JsonBuilder
@@ -75,45 +76,21 @@ class ModuleApiPlugin implements Plugin<Project> {
7576

7677
extension = project.extensions.create("moduleApi", ModuleApiPluginExtension)
7778
project.afterEvaluate {
78-
def moduleApiClosure = this.project["moduleApi"]
79-
if (moduleApiClosure == null) {
80-
println("closure moduleApi is null, skip")
81-
return
82-
}
83-
if (moduleApiClosure.srcDir == null || moduleApiClosure.destDir == null) {
84-
println("project(${project.name}), moduleApi.srcDir or moduleApi.destDir is null")
85-
return
79+
JSONObject initArg = getArgsFromExtension(this.project)
80+
if (initArg == null) {
81+
initArg = getArgsFromConfigFile(this.project)
8682
}
87-
JSONObject initArg = new JSONObject();
88-
initArg.put("srcDir", (moduleApiClosure.srcDir == null ? "" : moduleApiClosure.srcDir))
89-
initArg.put("destDir", (moduleApiClosure.destDir == null ? "" : moduleApiClosure.destDir))
90-
initArg.put("templateDir", (moduleApiClosure.templateDir == null ? "" : moduleApiClosure.templateDir))
91-
if (extension.makeApiRules != null && extension.makeApiRules.length > 0) {
92-
JSONArray jsonArray = new JSONArray();
93-
for (String rule : extension.makeApiRules) {
94-
jsonArray.add(rule)
95-
}
96-
initArg.put("makeApiRules", jsonArray)
97-
}
98-
if (extension.logger != null) {
99-
JsonBuilder jsonBuilder = new JsonBuilder()
100-
jsonBuilder {
101-
logger extension.logger
102-
}
103-
println("ModuleApi : ${jsonBuilder.toString()}")
104-
JSONObject loggerJson = JSONObject.fromObject(jsonBuilder.toString())
105-
if (!loggerJson.isNullObject() && !loggerJson.isEmpty()) {
106-
initArg.put("logger", loggerJson.get("logger"))
107-
}
108-
83+
if (initArg == null) {
84+
initArg = new JSONObject();
85+
initArg.put("srcDir", "${this.project.projectDir.absolutePath}/src/main/api".toString())
86+
initArg.put("destDir", "${this.project.rootProject.projectDir.absolutePath}/api/src/main/api".toString())
10987
}
88+
println "moduleApi(${this.project.name}) srcDir : '${initArg.getString("srcDir")}'"
89+
println "moduleApi(${this.project.name}) destDir : '${initArg.getString("destDir")}'"
90+
println "moduleApi(${this.project.name}) makeApiRules : '${initArg.get("makeApiRules")}'"
11091

111-
println "moduleApi(${this.project.name}) srcDir : '${moduleApiClosure.srcDir}'"
112-
println "moduleApi(${this.project.name}) destDir : '${moduleApiClosure.destDir}'"
113-
println "moduleApi(${this.project.name}) makeApiRules : '${moduleApiClosure.makeApiRules}'"
114-
115-
File srcDir = this.project.file(moduleApiClosure.srcDir)
116-
File destDir = this.project.file(moduleApiClosure.destDir)
92+
File srcDir = this.project.file(initArg.getString("srcDir"))
93+
File destDir = this.project.file(initArg.getString("destDir"))
11794

11895
if (srcDir == null || !srcDir.exists() || destDir == null) {
11996
println("project: ${this.project} do not exists moduleApi srcDir or destDir.")
@@ -282,7 +259,68 @@ class ModuleApiPlugin implements Plugin<Project> {
282259
}
283260
context.initialize(initArgs);
284261
context.execute();
262+
285263
Log.close();
286264
}
265+
266+
JSONObject getArgsFromConfigFile(Project project) {
267+
String shellCode = FileOperation.read("${project.rootDir.absolutePath}/.config/module-api.ag-conf")
268+
if (shellCode == null || shellCode.length() == 0) {
269+
println("shellCode is null or nil, config file path : ${project.rootDir.absolutePath}/.config/module-api.ag-conf")
270+
return null
271+
}
272+
Binding binding = new Binding()
273+
binding.setProperty("project", project)
274+
binding.setProperty("name", project.name)
275+
binding.setProperty("rootDir", project.rootDir)
276+
binding.setProperty("projectDir", project.projectDir.absolutePath)
277+
binding.setProperty("buildDir", project.buildDir.absolutePath)
278+
279+
GroovyShell groovyShell = new GroovyShell(binding)
280+
StringBuilder builder = new StringBuilder()
281+
builder.append("import groovy.json.JsonBuilder\n")
282+
builder.append("JsonBuilder moduleApi = new JsonBuilder()\n")
283+
builder.append(shellCode)
284+
builder.append("\n")
285+
builder.append("moduleApi.toString()")
286+
Object result = groovyShell.evaluate(builder.toString())
287+
return JSONObject.fromObject(result.toString())
288+
}
289+
290+
JSONObject getArgsFromExtension(Project project) {
291+
def moduleApiClosure = project["moduleApi"]
292+
if (moduleApiClosure == null) {
293+
println("getArgsFromExtension, closure moduleApi is null, skip")
294+
return null
295+
}
296+
if (moduleApiClosure.srcDir == null || moduleApiClosure.destDir == null) {
297+
println("getArgsFromExtension, project(${project.name}), moduleApi.srcDir or moduleApi.destDir is null")
298+
return null
299+
}
300+
JSONObject initArg = new JSONObject();
301+
initArg.put("srcDir", (moduleApiClosure.srcDir == null ? "" : moduleApiClosure.srcDir))
302+
initArg.put("destDir", (moduleApiClosure.destDir == null ? "" : moduleApiClosure.destDir))
303+
initArg.put("templateDir", (moduleApiClosure.templateDir == null ? "" : moduleApiClosure.templateDir))
304+
if (moduleApiClosure.makeApiRules != null && moduleApiClosure.makeApiRules.length > 0) {
305+
JSONArray jsonArray = new JSONArray();
306+
for (String rule : moduleApiClosure.makeApiRules) {
307+
jsonArray.add(rule)
308+
}
309+
initArg.put("makeApiRules", jsonArray)
310+
}
311+
if (moduleApiClosure.logger != null) {
312+
JsonBuilder jsonBuilder = new JsonBuilder()
313+
jsonBuilder {
314+
logger moduleApiClosure.logger
315+
}
316+
println("ModuleApi : ${jsonBuilder.toString()}")
317+
JSONObject loggerJson = JSONObject.fromObject(jsonBuilder.toString())
318+
if (!loggerJson.isNullObject() && !loggerJson.isEmpty()) {
319+
initArg.put("logger", loggerJson.get("logger"))
320+
}
321+
322+
}
323+
return initArg
324+
}
287325
}
288326

module-api-ag-extension/src/main/resources/res/ag-template/ModuleApi.ag-template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ if (methodSet) {
2525
continue;
2626
}
2727
var argsStr = "";
28-
if (m._args.length > 0) {
28+
if (m._args && m._args.length > 0) {
2929
var arg = m._args[0];
3030
argsStr = (arg._type.name) + (arg._type.genericityType ? "<" + arg._type.genericityType.join(", ") + "> " : " ") + arg._name;
3131
shouldImportClassSet.push(arg._type.name);

module-api/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ android {
3232

3333
dependencies {
3434
compile fileTree(dir: 'libs', include: ['*.jar'])
35-
provided 'com.android.support:appcompat-v7:+'
35+
provided 'com.android.support:appcompat-v7:25.1.0'
3636
testCompile 'junit:junit:4.12'
3737

3838
compile project(':module-api-extension')

0 commit comments

Comments
 (0)