数据集TableData解析创建插件示例
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

165 lines
5.7 KiB

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'
}
}