import org.gradle.plugins.ide.idea.model.IdeaLanguageLevel plugins { id 'java' id 'java-library' } def loadLocalProp() { Properties prop = new Properties(); File propFile = new File(projectDir.getAbsolutePath(), "local.properties") if (propFile.exists()) { prop.load(propFile.newDataInputStream()) } return prop } def getRootGradle() { def currentGradle = gradle while (currentGradle.parent) { currentGradle = currentGradle.parent } return currentGradle } def findOutputPath(Properties p) { def localEnv = p.getProperty("local.env") if (localEnv != null && localEnv.length() > 0) { return localEnv } def rootGradle = getRootGradle() def hookProject = rootGradle.getIncludedBuilds() .find({ build -> build.name == 'hook' }) if (hookProject) { def path = hookProject.projectDir.parentFile.parent + '/env/webroot/WEB-INF' return path } return projectDir.getAbsolutePath() + "/env/webroot/WEB-INF" } def getFRVersion(String name) { def v = localProp.getProperty("local.dev." + name) if ("true".equalsIgnoreCase(v)) { return "DEV" + frVersion } return frVersion } /* 工程自定义配置说明 --------------- 1. 工程env默认情况为build.gradle所在目录下的env/webroot/WEB-INF, 如果本工程是导入FR主代码工程中,env路径是主代码工程finereport-maven所在目录下的env/webroot/WEB-INF 2. 如果需要自定义env路径,则在build.gradle所在目录下创建一个local.properties文件(该文件不会进入git仓库) 在里面添加: local.env=你的WEB-INF目录 3. 主jar依赖默认只依赖jar包,对于有代码的模块,也可以在local.properties文件中增加对应的配置来让其依赖代码 例如存在core和report-engine的代码,只需在local.properties中新增: local.dev.core=true local.dev.report-engine=true 最终的依赖就是: com.fr.core:fine-core:DEV10.0-RELEASE-SNAPSHOT com.fr.report:fine-report-engine:DEV10.0-RELEASE-SNAPSHOT 可以依赖代码的模块有以下几个: local.dev.third=true local.dev.core=true local.dev.activator=true local.dev.datasource=true local.dev.webui=true local.dev.decision=true local.dev.decision-report=true local.dev.schedule=true local.dev.schedule-report=true local.dev.report-engine=true local.dev.report-designer=true 4. 完整local.properties内容示例,假设输出目录自定义为/Users/rinoux/envs/dev/webroot/WEB-INF, 依赖代码的模块为core,activator,datasource,decision,decision-report,report-engine,report-designer, 文件内容如下: local.env=/Users/rinoux/envs/dev/webroot/WEB-INF local.dev.core=true local.dev.activator=true local.dev.datasource=true local.dev.decision=true local.dev.decision-report=true local.dev.report-engine=true local.dev.report-designer=true */ ext { localProp = loadLocalProp() env = findOutputPath(localProp) frVersion = "10.0-RELEASE-SNAPSHOT" def xmlParser = new XmlParser(); def plugin = xmlParser.parse("${project.projectDir}/plugin.xml") finePluginId = plugin.id[0].find() finePluginVersion = plugin.version[0].find() //插件编译目录 outputPath = "${env}/plugins/plugin-${finePluginId}-${finePluginVersion}" ignoreTestFailureSetting = true languageLevelSetting = 1.8 } dependencies { } allprojects { apply plugin: 'java' apply plugin: 'java-library' apply plugin: 'maven-publish' apply plugin: 'java-gradle-plugin' apply plugin: 'idea' group 'com.fr.plugin' version frVersion sourceCompatibility = languageLevelSetting targetCompatibility = languageLevelSetting tasks.withType(JavaCompile) { options.encoding = "UTF-8" } repositories { mavenLocal() } idea { module { inheritOutputDirs = false outputDir = file(outputPath + "/classes") testOutputDir = file(outputPath + "/test-classes") languageLevel = new IdeaLanguageLevel(sourceCompatibility) targetBytecodeVersion = targetCompatibility } } task copyPluginXML(type: Copy) { //拷贝plugin.xml到插件安装目录 into outputPath from(projectDir.getAbsolutePath()) { include "plugin.xml" } } processResources.dependsOn copyPluginXML dependencies { implementation 'com.fr.third.server:servlet-api:3.0' implementation 'com.fr.third:fine-third:' + getFRVersion("third") implementation 'com.fr.core:fine-core:' + getFRVersion("core") implementation 'com.fr.activator:fine-activator:' + getFRVersion("activator") implementation 'com.fr.datasource:fine-datasource:' + getFRVersion("datasource") implementation 'com.fr.webui:fine-webui:' + getFRVersion("webui") implementation 'com.fr.decision:fine-decision:' + getFRVersion("decision") implementation 'com.fr.decision:fine-decision-report:' + getFRVersion("decision-report") implementation 'com.fr.schedule:fine-schedule:' + getFRVersion("schedule") implementation 'com.fr.schedule:fine-schedule-report:' + getFRVersion("schedule-report") implementation 'com.fr.report:fine-report-engine:' + getFRVersion("report-engine") implementation 'com.fr.report:fine-report-designer:' + getFRVersion("report-designer") testImplementation 'org.easymock:easymock:3.5.1' testImplementation 'org.powermock:powermock-module-junit4:1.7.1' testImplementation 'org.powermock:powermock-api-easymock:1.7.1' testImplementation 'junit:junit:4.12' } }