Hi Jacques,
What happened? It seems to have touched everything in the gradle.build, making it hard to review. Best regards, Pierre Smits ORRTIZ.COM <http://www.orrtiz.com> OFBiz based solutions & services OFBiz Extensions Marketplace http://oem.ofbizci.net/oci-2/ On Tue, Jul 19, 2016 at 12:41 PM, <[hidden email]> wrote: > Author: jleroux > Date: Tue Jul 19 10:41:28 2016 > New Revision: 1753360 > > URL: http://svn.apache.org/viewvc?rev=1753360&view=rev > Log: > Creates a (short term) Gradle "cleanAnt" task to remove old build dirs - > https://issues.apache.org/jira/browse/OFBIZ-7898 > > This adapts the "old" Ant "clean*" targets in order to allow to remove old > build dirs. It's not a problem if you have done an Ant clean just before > removing Ant whith a "svn up" but I guess most of us did not. > > I will then also remove the related svn:ignore (build dirs)... WIP... > > Modified: > ofbiz/trunk/build.gradle > > Modified: ofbiz/trunk/build.gradle > URL: > http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753360&r1=1753359&r2=1753360&view=diff > > ============================================================================== > --- ofbiz/trunk/build.gradle (original) > +++ ofbiz/trunk/build.gradle Tue Jul 19 10:41:28 2016 > @@ -1,850 +1,872 @@ > -/* > - * Licensed to the Apache Software Foundation (ASF) under one > - * or more contributor license agreements. See the NOTICE file > - * distributed with this work for additional information > - * regarding copyright ownership. The ASF licenses this file > - * to you under the Apache License, Version 2.0 (the > - * "License"); you may not use this file except in compliance > - * with the License. You may obtain a copy of the License at > - * > - * http://www.apache.org/licenses/LICENSE-2.0 > - * > - * Unless required by applicable law or agreed to in writing, > - * software distributed under the License is distributed on an > - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > - * KIND, either express or implied. See the License for the > - * specific language governing permissions and limitations > - * under the License. > - */ > -import org.apache.tools.ant.filters.ReplaceTokens > - > -/* ======================================================== > - * Project setup > - * ======================================================== */ > - > -apply plugin: 'java' > -apply plugin: 'eclipse' > - > -apply from: 'common.gradle' > - > -// java settings > -def jvmArguments = ['-Xms128M', '-Xmx512M'] > -ext.ofbizMainClass = 'org.apache.ofbiz.base.start.Start' > -javadoc.failOnError = false > -sourceCompatibility = '1.8' > -targetCompatibility = '1.8' > - > -// root and subproject settings > -defaultTasks 'build' > - > -allprojects { > - repositories{ > - jcenter() > - } > -} > - > -subprojects { > - configurations { > - // compile-time plugin libraries > - pluginLibsCompile > - // runtime plugin libraries > - pluginLibsRuntime > - } > -} > - > -configurations { > - junitLibs > -} > - > -dependencies { > - // general framework libs > - compile 'apache-xerces:resolver:2.9.1' > - compile 'apache-xerces:xercesImpl:2.9.1' > - compile 'avalon-framework:avalon-framework-impl:4.2.0' > - compile 'bouncycastle:bouncycastle-jce-jdk13:112' > - compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.0' > - compile 'com.fasterxml.jackson.core:jackson-core:2.4.2' > - compile 'com.google.guava:guava:19.0' > - compile 'com.google.zxing:core:3.2.1' > - compile > 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.0' > - compile > 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20160628.1' > - compile 'com.ibm.icu:icu4j:57.1' > - compile 'com.lowagie:itext:2.1.7' > - compile 'com.sun.mail:javax.mail:1.5.1' > - compile > 'com.sun.syndication:com.springsource.com.sun.syndication:0.9.0' > - compile 'com.thoughtworks.xstream:xstream:1.4.9' > - compile 'commons-beanutils:commons-beanutils-core:1.8.3' > - compile 'commons-cli:commons-cli:1.3.1' > - compile 'commons-codec:commons-codec:1.10' > - compile 'commons-el:commons-el:1.0' > - compile 'commons-fileupload:commons-fileupload:1.3.1' > - compile 'commons-io:commons-io:2.4' > - compile 'commons-logging:commons-logging:1.2' > - compile 'commons-net:commons-net:3.3' > - compile 'commons-validator:commons-validator:1.5.1' > - compile 'de.odysseus.juel:juel-impl:2.2.7' > - compile 'de.odysseus.juel:juel-spi:2.2.7' > - compile 'httpunit:httpunit:1.7' > - compile 'javax.el:javax.el-api:3.0.1-b04' > - compile 'javax.servlet:javax.servlet-api:3.1.0' > - compile 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.0' > - compile 'javolution:javolution:5.4.3' > - compile 'junit:junit-dep:4.10' > - compile 'jython:jython:2.1' > - compile 'net.fortuna.ical4j:ical4j:1.0-rc3-atlassian-11' > - compile 'net.sf.barcode4j:barcode4j-fop-ext-complete:2.0' > - compile 'net.sf.dozer:dozer:4.2.1' > - compile 'net.sf.ezmorph:ezmorph:0.9.1' > - compile 'net.sourceforge.nekohtml:nekohtml:1.9.16' > - compile 'org.apache.ant:ant-apache-bsf:1.9.0' > - compile 'org.apache.ant:ant-junit:1.9.0' > - compile 'org.apache.ant:ant-launcher:1.9.0' > - compile 'org.apache.axis2:axis2-adb:1.7.1' > - compile 'org.apache.axis2:axis2-kernel:1.7.1' > - compile 'org.apache.axis2:axis2-transport-http:1.7.1' > - compile 'org.apache.axis2:axis2-transport-local:1.7.1' > - compile 'org.apache.bsf:com.springsource.org.apache.bsf:2.4.0' > - compile 'org.apache.commons:commons-collections4:4.1' > - compile 'org.apache.commons:commons-compress:1.11' > - compile 'org.apache.commons:commons-csv:1.1' > - compile 'org.apache.commons:commons-dbcp2:2.1' > - compile 'org.apache.commons:commons-pool2:2.3' > - compile 'org.apache.derby:derby:10.11.1.1' > - compile 'org.apache.geronimo.components:geronimo-transaction:3.1.1' > - compile 'org.apache.geronimo.specs:geronimo-activation_1.0.2_spec:1.0' > - compile > 'org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec:2.0.0' > - compile 'org.apache.geronimo.specs:geronimo-jaxr_1.0_spec:1.0' > - compile 'org.apache.geronimo.specs:geronimo-jaxrpc_1.1_spec:1.1' > - compile 'org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1' > - compile 'org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1' > - compile 'org.apache.geronimo.specs:geronimo-saaj_1.3_spec:1.1' > - compile 'org.apache.httpcomponents:httpclient-cache:4.4.1' > - compile 'org.apache.httpcomponents:httpcore:4.4.1' > - compile 'org.apache.logging.log4j:log4j-1.2-api:2.3' > - compile 'org.apache.logging.log4j:log4j-api:2.3' > - compile 'org.apache.logging.log4j:log4j-core:2.3' > - compile 'org.apache.logging.log4j:log4j-nosql:2.3' > - compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.3' > - compile 'org.apache.neethi:neethi:3.0.3' > - compile 'org.apache.pdfbox:fontbox:1.8.11' > - compile 'org.apache.pdfbox:jempbox:1.8.11' > - compile 'org.apache.pdfbox:pdfbox:1.8.12' > - compile 'org.apache.poi:poi:3.14' > - compile > 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.xpp3:1.1.4c_7' > - compile 'org.apache.shiro:shiro-core:1.2.5' > - compile 'org.apache.tika:tika-core:1.12' > - compile 'org.apache.tika:tika-parsers:1.12' > - compile 'org.apache.tomcat:tomcat-annotations-api:7.0.54' > - compile 'org.apache.tomcat:tomcat-api:8.0.33' > - compile 'org.apache.tomcat:tomcat-catalina-ha:8.0.33' > - compile 'org.apache.tomcat:tomcat-catalina:8.0.33' > - compile 'org.apache.tomcat:tomcat-coyote:8.0.33' > - compile 'org.apache.tomcat:tomcat-jasper:8.0.33' > - compile 'org.apache.tomcat:tomcat-jni:8.0.33' > - compile 'org.apache.tomcat:tomcat-tribes:8.0.33' > - compile 'org.apache.tomcat:tomcat-util-scan:8.0.33' > - compile 'org.apache.tomcat:tomcat-util:8.0.33' > - compile 'org.apache.tomcat.embed:tomcat-embed-websocket:8.0.33' > - compile 'org.apache.tomcat.extras:tomcat-extras-juli-adapters:8.0.33' > - compile 'org.apache.tomcat.extras:tomcat-extras-juli:8.0.33' > - compile 'org.apache.woden:woden-core:1.0M10' > - compile 'org.apache.ws.commons.axiom:axiom-api:1.2.17' > - compile 'org.apache.ws.commons.axiom:axiom-impl:1.2.17' > - compile 'org.apache.ws.commons.util:ws-commons-util:1.0.2' > - compile 'org.apache.ws.xmlschema:xmlschema-core:2.2.1' > - compile > 'org.apache.xalan:com.springsource.org.apache.xml.serializer:2.7.1' > - compile 'org.apache.xmlgraphics:fop:2.1' > - compile 'org.apache.xmlgraphics:xmlgraphics-commons:2.1' > - compile 'org.apache.xmlrpc:xmlrpc-client:3.1.2' > - compile 'org.apache.xmlrpc:xmlrpc-common:3.1.2' > - compile 'org.apache.xmlrpc:xmlrpc-server:3.1.2' > - compile > 'org.codeartisans.thirdparties.swing:batik-all:1.8pre-r1084380' > - compile 'org.codehaus.groovy:groovy-all:2.4.5' > - compile 'org.dom4j:com.springsource.org.dom4j:1.6.1' > - compile 'org.eclipse.jdt.core.compiler:ecj:4.5' > - compile 'org.freemarker:freemarker:2.3.24-incubating' > - compile 'org.hamcrest:hamcrest-all:1.3' > - compile 'org.jdom:jdom:1.1' > - compile 'org.lucee:commons-lang:2.6.0' > - compile 'org.owasp.esapi:esapi:2.1.0' > - compile 'org.slf4j:slf4j-api:1.6.4' > - compile 'org.springframework:spring-core:4.2.3.RELEASE' > - compile 'org.springframework:spring-test:4.2.3.RELEASE' > - compile 'org.zapodot:jackson-databind-java-optional:2.4.2' > - compile 'oro:oro:2.0.8' > - compile 'ws-commons-java5:ws-commons-java5:1.0.1' > - compile 'wsdl4j:wsdl4j:1.6.2' > - compile 'xalan:xalan:2.7.2' > - compile 'xml-apis:xml-apis-ext:1.3.04' > - compile 'xml-apis:xml-apis:1.4.01' > - compile 'mysql:mysql-connector-java:5.1.36' > - compile 'postgresql:postgresql:9.0-801.jdbc4' > - > - > - // plugin libs > - subprojects.each { subProject -> > - compile project(path: subProject.path, configuration: > 'pluginLibsCompile') > - runtime project(path: subProject.path, configuration: > 'pluginLibsRuntime') > - } > - > - // libs needed for junitreport > - junitLibs 'junit:junit:4.12' > - junitLibs 'org.apache.ant:ant-junit:1.9.7' > - junitLibs 'org.apache.ant:ant-junit4:1.9.7' > - > - // local libs > - getDirectoryInActiveComponentsIfExists('lib').each { libDir -> > - compile fileTree(dir: libDir, include: '**/*.jar') > - } > - runtime files("${rootDir}/build/libs/ofbiz-base-test.jar") > -} > - > -def excludedJavaSources = [] > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealEvents.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealPaymentServiceTest.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/orbital/OrbitalPaymentServices.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/paypal/PayPalServices.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayPaymentServices.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayServiceTest.java' > -excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/verisign/PayflowPro.java' > -excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayInputStream.java' > -excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayOutputStream.java' > -excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeServices.java' > -excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeWorker.java' > -excludedJavaSources.add > 'org/apache/ofbiz/content/report/JREntityListIteratorDataSource.java' > -excludedJavaSources.add > 'org/apache/ofbiz/content/report/JRMapCollectionDataSource.java' > -excludedJavaSources.add > 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareException.java' > -excludedJavaSources.add > 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareServices.java' > -excludedJavaSources.add > 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareUTL.java' > -excludedJavaSources.add 'ShipmentScaleApplet.java' > -excludedJavaSources.add > 'org/apache/ofbiz/securityext/thirdparty/truition/TruitionCoReg.java' > -excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsJXlsViewHandler.java' > -excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsPdfViewHandler.java' > -excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsPoiXlsViewHandler.java' > -excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsXmlViewHandler.java' > - > -sourceSets { > - main { > - java { > - srcDirs = > getDirectoryInActiveComponentsIfExists('src/main/java') > - exclude excludedJavaSources > - } > - resources { > - srcDirs = > getDirectoryInActiveComponentsIfExists('src/main/java') > - srcDirs += getDirectoryInActiveComponentsIfExists('config') > - exclude excludedJavaSources > - } > - } > - > - test { > - java { > - srcDirs = > getDirectoryInActiveComponentsIfExists('src/test/java') > - } > - resources { > - srcDirs = > getDirectoryInActiveComponentsIfExists('src/test/java') > - } > - } > -} > - > -jar { > - manifest { > - attributes( > - "Implementation-Title": project.name, > - "Main-Class": ofbizMainClass, > - "Class-Path": getJarManifestClasspathForCurrentOs() > - ) > - } > -} > - > -// Eclipse plugin settings > -eclipse.classpath.file.whenMerged { classpath -> > - /* The code inside this block removes unnecessary entries > - * in the .classpath file which are generated automatically > - * due to the settings in the sourceSets block > - */ > - def osName = System.getProperty('os.name').toLowerCase() > - def osDirSeparator = osName.contains('windows') ? '\\' : '/' > - > - iterateOverActiveComponents { component -> > - def componentName = component.toString() - rootDir.toString() > - classpath.entries.removeAll { entry -> > - // remove any "src" entries in .classpath of the form > /componentName > - entry.kind == 'src' && > - entry.path ==~ '.*/+(' + > componentName.tokenize(osDirSeparator).last() + ')$' > - } > - } > - classpath.entries.removeAll { entry -> > - /* remove "src" entries in .classpath named: > - * /framework, /applications, /specialpurpose and /hot-deploy > - */ > - entry.kind == 'src' && > - entry.path ==~ /(\/+framework)$/ || > - entry.path ==~ /(\/+applications)$/ || > - entry.path ==~ /(\/+specialpurpose)$/ || > - entry.path ==~ /(\/+hot-deploy)$/ > - } > - getDirectoryInActiveComponentsIfExists('config').each { configDir -> > - /* remove any "src" entries in .classpath of the form > componentName/config > - * > - * windows format: \framework\base\config > - * Unix format: /framework/base/config > - * .classpath format: framework/base/config > - * > - * Must convert both windows and unix to .classpath format to > - * be able to remove it from the file > - */ > - def relativeDir = configDir.toString() - rootDir.toString() - > osDirSeparator > - def eclipseConfigSrc = osName.contains('windows') ? > relativeDir.replaceAll("\\\\", "/") : relativeDir > - classpath.entries.removeAll { entry -> > - entry.kind == 'src' && > - entry.path == eclipseConfigSrc > - } > - } > -} > -tasks.eclipse.dependsOn(cleanEclipse) > - > -/* ======================================================== > - * Tasks > - * ======================================================== */ > - > -// ========== Task group labels ========== > -def cleanupGroup = 'Cleaning' > -def ofbizServer = 'OFBiz Server' > -def sysadminGroup = 'System Administration' > -def committerGroup = 'OFBiz committers' > - > -// ========== OFBiz Server tasks ========== > - > -task loadDefault(group: ofbizServer) { > - dependsOn 'ofbiz --load-data' > - description 'Load default data; meant for OFBiz development, testing, > and demo purposes' > -} > - > -task testIntegration(group: ofbizServer) { > - dependsOn 'ofbiz --test' > - description 'Run OFBiz integration tests; You must run loadDefault > before running this task' > -} > - > -task terminateOfbiz(group: ofbizServer, > - description: 'Force termination of any running OFBiz servers, only > use if \"--shutdown\" command fails') << { > - def os = System.getProperty("os.name").toLowerCase() > - if (os.contains("windows")) { > - Runtime.getRuntime().exec("wmic process where \"CommandLine Like > \'%org.apache.ofbiz.base.start.Start%\'\" Call Terminate") > - } else { > - def processOutput = new ByteArrayOutputStream() > - exec { > - commandLine 'ps', 'ax' > - standardOutput = processOutput > - } > - processOutput.toString().split(System.lineSeparator()).each { > line -> > - if(line ==~ /.*org\.apache\.ofbiz\.base\.start\.Start.*/) { > - exec { commandLine 'kill', '-9', line.tokenize().first() } > - } > - } > - } > -} > - > -task loadAdminUserLogin(group: ofbizServer) { > - description 'Create admin user with temporary password equal to > ofbiz. You must provide userLoginId' > - createOfbizCommandTask('executeLoadAdminUser', > - ['--load-data', 'file=/runtime/tmp/AdminUserLoginData.xml'], > - jvmArguments, false) > - executeLoadAdminUser.doFirst { > - copy { > - from > ("${rootDir}/framework/resources/templates/AdminUserLoginData.xml") { > - filter(ReplaceTokens, tokens: [userLoginId: userLoginId]) > - } > - into "${rootDir}/runtime/tmp/" > - } > - } > - dependsOn executeLoadAdminUser > - doLast { > - delete("${rootDir}/runtime/tmp/AdminUserLoginData.xml") > - } > -} > - > -task loadTenant(group: ofbizServer, description: 'Load data using > tenantId') { > - > - createOfbizCommandTask('executeLoadTenant', [], jvmArguments, false) > - > - if(project.hasProperty('tenantId')) { > - executeLoadTenant.args '--load-data' > - executeLoadTenant.args "delegator=default#${tenantId}" > - } > - if(project.hasProperty('tenantReaders')) { > - executeLoadTenant.args '--load-data' > - executeLoadTenant.args "readers=${tenantReaders}" > - } > - if(project.hasProperty('tenantComponent')) { > - executeLoadTenant.args '--load-data' > - executeLoadTenant.args "component=${tenantComponent}" > - } > - > - doLast { > - if(!project.hasProperty('tenantId')) { > - throw new GradleException('Missing project property tenantId') > - } > - } > - dependsOn executeLoadTenant > -} > - > -task createTenant(group: ofbizServer, description: 'Create a new tenant > in your environment') { > - > - def databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" > - > - task prepareAndValidateTenantArguments << { > - if(!project.hasProperty('tenantId')) { > - throw new GradleException('Project property tenantId is > missing') > - } > - if(!project.hasProperty('tenantName')) { > - throw new GradleException('Project property tenantName is > missing') > - } > - // dbPlatform values: D(Derby), M(MySQL), O(Oracle), > P(PostgreSQL) (default D) > - if(project.hasProperty('dbPlatform')) { > - if(dbPlatform == 'D') { > - databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" > - } else if(dbPlatform == 'M') { > - databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-MySQL.xml" > - } else if(dbPlatform == 'O') { > - databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-Oracle.xml" > - } else if(dbPlatform == 'P') { > - databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml" > - } else { > - throw new GradleException('Invalid value for property > dbPlatform: ' + "${dbPlatform}") > - } > - } > - } > - > - task generateDatabaseTemplateFile(dependsOn: > prepareAndValidateTenantArguments) << { > - def filterTokens = ['tenantId': tenantId, > - 'tenantName': tenantName, > - 'domainName': project.hasProperty('domainName')? > "${domainName}":'org.apache.ofbiz', > - 'db-IP': project.hasProperty('dbIp')? "${dbIp}":'', > - 'db-User': project.hasProperty('dbUser')? "${dbUser}":'', > - 'db-Password': project.hasProperty('dbPassword')? > "${dbPassword}":''] > - > - generateFileFromTemplate(databaseTemplateFile, 'runtime/tmp', > - filterTokens, 'tmpFilteredTenantData.xml') > - } > - > - task generateAdminUserTemplateFile(dependsOn: > prepareAndValidateTenantArguments) << { > - generateFileFromTemplate( > - > "${rootDir}/framework/resources/templates/AdminUserLoginData.xml", > - 'runtime/tmp', > - ['userLoginId': "${tenantId}-admin".toString()], > - 'tmpFilteredUserLogin.xml') > - } > - > - // Load the tenants master database > - createOfbizCommandTask('loadTenantOnDefaultDelegator', > - ['--load-data', 'file=/runtime/tmp/tmpFilteredTenantData.xml'], > - jvmArguments, false) > - loadTenantOnDefaultDelegator.dependsOn(generateDatabaseTemplateFile, > generateAdminUserTemplateFile) > - > - // Load the actual tenant data > - createOfbizCommandTask('loadTenantData', [], jvmArguments, false) > - loadTenantData.dependsOn(loadTenantOnDefaultDelegator) > - > - // Load the tenant admin user account > - createOfbizCommandTask('loadTenantAdminUserLogin', [], jvmArguments, > false) > - loadTenantAdminUserLogin.dependsOn(loadTenantData) > - > - /* pass arguments to tasks, must be done this way > - * because we are in the configuration phase. We cannot > - * set the parameters at the execution phase. */ > - if(project.hasProperty('tenantId')) { > - loadTenantData.args '--load-data' > - loadTenantData.args "delegator=default#${tenantId}" > - > - loadTenantAdminUserLogin.args '--load-data' > - loadTenantAdminUserLogin.args "delegator=default#${tenantId}" > - loadTenantAdminUserLogin.args '--load-data' > - loadTenantAdminUserLogin.args > "file=${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml" > - } > - if(project.hasProperty('tenantReaders')) { > - loadTenantData.args '--load-data' > - loadTenantData.args "readers=${tenantReaders}" > - } > - > - dependsOn(loadTenantAdminUserLogin) > - > - // cleanup > - doLast { > - delete("${rootDir}/runtime/tmp/tmpFilteredTenantData.xml") > - delete("${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml") > - } > -} > - > -// ========== System Administration tasks ========== > -task createComponent(group: sysadminGroup, description: 'Create the > layout of an OFBiz component in the hot-deploy folder.') << { > - > - def filterTokens = ['component-name': componentName, > - 'component-resource-name': componentResourceName, > - 'webapp-name': webappName, > - 'base-permission': basePermission] > - def templateDir = "${rootDir}/framework/resources/templates" > - def componentDir = "${rootDir}/hot-deploy/${componentName}" > - > - logger.info('Creating a component with the following properties: ') > - logger.info(" - componentName: ${componentName}") > - logger.info(" - componentResourceName: ${componentResourceName}") > - logger.info(" - webappName: ${webappName}") > - logger.info(" - basePermission: ${basePermission}") > - > - mkdir componentDir > - mkdir componentDir+"/config" > - mkdir componentDir+"/data" > - mkdir componentDir+"/data/helpdata" > - mkdir componentDir+"/dtd" > - mkdir componentDir+"/documents" > - mkdir componentDir+"/entitydef" > - mkdir componentDir+"/lib" > - mkdir componentDir+"/patches" > - mkdir componentDir+"/patches/test" > - mkdir componentDir+"/patches/qa" > - mkdir componentDir+"/patches/production" > - mkdir componentDir+"/script" > - mkdir componentDir+"/servicedef" > - mkdir componentDir+"/src" > - mkdir componentDir+"/testdef" > - mkdir componentDir+"/webapp" > - mkdir componentDir+"/webapp/${webappName}" > - mkdir componentDir+"/webapp/${webappName}/error" > - mkdir componentDir+"/webapp/${webappName}/WEB-INF" > - mkdir componentDir+"/webapp/${webappName}/WEB-INF/actions" > - mkdir componentDir+"/widget/" > - > - generateFileFromTemplate(templateDir+"/ofbiz-component.xml", > componentDir, > - filterTokens, "ofbiz-component.xml") > - generateFileFromTemplate(templateDir+"/TypeData.xml", > componentDir+"/data", > - filterTokens, "${componentResourceName}TypeData.xml") > - > generateFileFromTemplate(templateDir+"/SecurityPermissionSeedData.xml", > componentDir+"/data", > - filterTokens, > "${componentResourceName}SecurityPermissionSeedData.xml") > - generateFileFromTemplate(templateDir+"/SecurityGroupDemoData.xml", > componentDir+"/data", > - filterTokens, "${componentResourceName}SecurityGroupDemoData.xml") > - generateFileFromTemplate(templateDir+"/DemoData.xml", > componentDir+"/data", > - filterTokens, "${componentResourceName}DemoData.xml") > - generateFileFromTemplate(templateDir+"/HELP.xml", > componentDir+"/data/helpdata", > - filterTokens, "HELP_${componentResourceName}.xml") > - generateFileFromTemplate(templateDir+"/document.xml", > componentDir+"/documents", > - filterTokens, "${componentResourceName}.xml") > - generateFileFromTemplate(templateDir+"/entitymodel.xml", > componentDir+"/entitydef", > - filterTokens, "entitymodel.xml") > - generateFileFromTemplate(templateDir+"/services.xml", > componentDir+"/servicedef", > - filterTokens, "services.xml") > - generateFileFromTemplate(templateDir+"/Tests.xml", > componentDir+"/testdef", > - filterTokens, "${componentResourceName}Tests.xml") > - generateFileFromTemplate(templateDir+"/UiLabels.xml", > componentDir+"/config", > - filterTokens, "${componentResourceName}UiLabels.xml") > - generateFileFromTemplate(templateDir+"/index.jsp", > componentDir+"/webapp/${webappName}", > - filterTokens, "index.jsp") > - generateFileFromTemplate(templateDir+"/error.jsp", > componentDir+"/webapp/${webappName}/error", > - filterTokens, "error.jsp") > - generateFileFromTemplate(templateDir+"/controller.xml", > componentDir+"/webapp/${webappName}/WEB-INF", > - filterTokens, "controller.xml") > - generateFileFromTemplate(templateDir+"/web.xml", > componentDir+"/webapp/${webappName}/WEB-INF", > - filterTokens, "web.xml") > - generateFileFromTemplate(templateDir+"/CommonScreens.xml", > componentDir+"/widget", > - filterTokens, "CommonScreens.xml") > - generateFileFromTemplate(templateDir+"/Screens.xml", > componentDir+"/widget", > - filterTokens, "${componentResourceName}Screens.xml") > - generateFileFromTemplate(templateDir+"/Menus.xml", > componentDir+"/widget", > - filterTokens, "${componentResourceName}Menus.xml") > - generateFileFromTemplate(templateDir+"/Forms.xml", > componentDir+"/widget", > - filterTokens, "${componentResourceName}Forms.xml") > - > - logger.info("Component successfully created in folder > ${rootDir}/hot-deploy/${componentName}.") > - logger.info("Restart OFBiz and then visit the URL: > https://localhost:8443/${webappName}") > -} > - > -task createTestReports(group: sysadminGroup, description: 'Generate HTML > reports from junit XML output') << { > - ant.taskdef(name: 'junitreport', > - classname: > 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator', > - classpath: configurations.junitLibs.asPath) > - ant.junitreport(todir: './runtime/logs/test-results') { > - fileset(dir: './runtime/logs/test-results') { > - include(name: '*.xml') > - } > - report(format:'frames', todir:'./runtime/logs/test-results/html') > - } > -} > -/* > - * TODO replace this code with something more declarative. > - * We are using it so that if tests fail we still get HTML reports > - */ > -gradle.taskGraph.afterTask { Task task, TaskState state -> > - if (task.name ==~ /^ofbiz.*--test.*/ > - || task.name ==~ /^ofbiz.*-t.*/) { > - tasks.createTestReports.execute() > - } > -} > - > -// ========== Clean up tasks ========== > -task cleanCatalina(group: cleanupGroup, description: 'Clean Catalina data > in runtime/catalina/work') << { > - delete "${rootDir}/runtime/catalina/work" > -} > -task cleanData(group: cleanupGroup, description: 'Clean all DB data > (Derby) under runtime/data') << { > - deleteAllInDirWithExclusions("${rootDir}/runtime/data/", ['README', > 'derby.properties']) > -} > -task cleanDownloads(group: cleanupGroup, description: 'Clean all > downloaded files') << { > - delete fileTree(dir: "${rootDir}/framework/base/lib", includes: > ['activemq-*.jar']) > - delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", > includes: ['postgresql-*.jar']) > - delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", > includes: ['mysql-*.jar']) > -} > -task cleanLogs(group: cleanupGroup, description: 'Clean all logs in > runtime/logs') << { > - deleteAllInDirWithExclusions("${rootDir}/runtime/logs/", ['README']) > -} > -task cleanOutput(group: cleanupGroup, description: 'Clean runtime/output > directory') << { > - deleteAllInDirWithExclusions("${rootDir}/runtime/output/", ['README']) > -} > -task cleanIndexes(group: cleanupGroup, description: 'Remove search > indexes (e.g. Lucene) from runtime/indexes') << { > - deleteAllInDirWithExclusions("${rootDir}/runtime/indexes/", > ['README', 'index.properties']) > -} > -task cleanTempfiles(group: cleanupGroup, description: 'Remove file in > runtime/tempfiles') << { > - deleteAllInDirWithExclusions("${rootDir}/runtime/tempfiles/", > ['README']) > - deleteAllInDirWithExclusions("${rootDir}/runtime/tmp/", ['README']) > -} > -task cleanUploads(group: cleanupGroup, description: 'Remove uploaded > files.') << { > - deleteAllInDirWithExclusions("${rootDir}/runtime/uploads/", []) > -} > -task cleanXtra(group: cleanupGroup, description: 'Clean extra generated > files like .rej, .DS_Store, etc.') << { > - delete fileTree(dir: "${rootDir}", includes: ['**/.nbattrs', > '**/*~','**/.#*', '**/.DS_Store', '**/*.rej', '**/*.orig']) > -} > -task cleanGradle(group: cleanupGroup, description: 'clean generated files > from gradle') << { > - delete file("${rootDir}/.gradle") > -} > - > -def cleanTasks = getTasksMatchingRegex(/^clean.+/) > -task cleanAll(group: cleanupGroup, dependsOn: [cleanTasks, clean]) { > - description 'Execute all cleaning tasks.' > -} > - > -// ========== Tasks for OFBiz committers ========== > -def websiteDir = "${rootDir}/../site" > -task copyDtds(group: committerGroup, description: 'Copy all DTDs from > OFBiz instance to website') << { > - mkdir websiteDir+'/dtds' > - copy { > - from(fileTree("${rootDir}").files) { > - include '**/*.xsd' > - exclude '**/002*.xsd' > - exclude '**/068*.xsd' > - exclude '**/161*.xsd' > - exclude '**/196*.xsd' > - exclude '**/197*.xsd' > - } > - into websiteDir+'/dtds' > - } > -} > - > -task gitInfoFooter(group: committerGroup, description: 'Update the Git > Branch-revision info in the footer') << { > - def branch > - def revision > - def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' > - File gitFooterFile = new File("${rootDir}/runtime/GitInfo.ftl") > - > - def branchOutput = new ByteArrayOutputStream() > - exec{ > - commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD' > - standardOutput = branchOutput > - } > - branch = branchOutput.toString() > - def revisionOutput = new ByteArrayOutputStream() > - exec{ > - commandLine 'git', 'rev-parse', 'HEAD' > - standardOutput = revisionOutput > - } > - revision = revisionOutput.toString() > - gitFooterFile.delete() > - gitFooterFile.createNewFile() > - gitFooterFile << "Branch: ${branch}" > - gitFooterFile << "Revision: ${revision}" > - gitFooterFile << "Built on: ${timestamp}" + System.lineSeparator() > - gitFooterFile << "Java Version: > ${org.gradle.internal.jvm.Jvm.current()}" > -} > - > -task svnInfoFooter(group: committerGroup, description: 'Update the > Subversion revision info in the footer') << { > - def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' > - File svnFooterFile = new File("${rootDir}/runtime/SvnInfo.ftl") > - def svnOutput = new ByteArrayOutputStream() > - exec{ > - commandLine 'svn', 'info', '--xml' > - standardOutput = svnOutput > - } > - def info = new XmlParser().parseText(svnOutput.toString()) > - svnFooterFile.delete() > - svnFooterFile.createNewFile() > - svnFooterFile << "Branch: ${info.entry.url.text()}" + > System.lineSeparator() > - svnFooterFile << "Revision: ${info.entry.commit.@revision}" + > System.lineSeparator() > - svnFooterFile << "Built on: ${timestamp}" + System.lineSeparator() > - svnFooterFile << "Java Version: > ${org.gradle.internal.jvm.Jvm.current()}" > -} > - > -// ========== hidden support tasks ========== > - > -/* without executing this task, a test would fail that is named > - * > org.apache.ofbiz.base.util.test.UtilObjectTests.testGetObjectFromFactory() > - * > - * The test fails because it requires defining a service provider, read > more below. > - * > http://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider > - */ > -task createBaseTestServiceProviderJar << { > - ant.jar(destfile: "${rootDir}/build/libs/ofbiz-base-test.jar") { > - service(type: > 'org.apache.ofbiz.base.util.test.UtilObjectTests$TestFactoryIntf') { > - provider(classname: > 'org.apache.ofbiz.base.util.test.UtilObjectTests$FirstTestFactory') > - provider(classname: > 'org.apache.ofbiz.base.util.test.UtilObjectTests$SecondTestFactory') > - } > - } > -} > -classes.dependsOn createBaseTestServiceProviderJar > - > -/* ======================================================== > - * Rules-based OFBiz server commands > - * ======================================================== */ > - > -tasks.addRule('Pattern: ofbiz <Commands>: Execute OFBiz startup > commands') { String taskName -> > - if(taskName ==~ /^ofbiz\s.*/ || taskName == 'ofbiz') { > - def arguments = (taskName - 'ofbiz').toLowerCase().tokenize(' ') > - createOfbizCommandTask(taskName, arguments, jvmArguments, false) > - } > -} > - > -tasks.addRule('Pattern: ofbizDebug <Commands>: Execute OFBiz startup > commands in remote debug mode') { String taskName -> > - if(taskName ==~ /^ofbizDebug\s.*/ || taskName == 'ofbizDebug') { > - def arguments = (taskName - > 'ofbizDebug').toLowerCase().tokenize(' ') > - createOfbizCommandTask(taskName, arguments, jvmArguments, true) > - } > -} > - > -tasks.addRule('Pattern: ofbizSecure <Commands>: Execute OFBiz startup > commands pre-loading the notsoserial Java agent') { String taskName -> > - if(taskName ==~ /^ofbizSecure\s.*/ || taskName == 'ofbizSecure') { > - def arguments = (taskName - > 'ofbizSecure').toLowerCase().tokenize(' ') > - jvmArguments.add('-server') > - > jvmArguments.add("-javaagent:${rootDir}/tools/security/notsoserial/notsoserial-1.0-SNAPSHOT.jar") > - > jvmArguments.add("-Dnotsoserial.whitelist=${rootDir}/tools/security/notsoserial/empty.txt") > - > jvmArguments.add("-Dnotsoserial.dryrun=${rootDir}/tools/security/notsoserial/is-deserialized.txt") > - > jvmArguments.add("-Dnotsoserial.trace=${rootDir}/tools/security/notsoserial/deserialize-trace.txt") > - createOfbizCommandTask(taskName, arguments, jvmArguments, false) > - } > -} > - > -tasks.addRule('Pattern: ofbizBackground <Commands>: Execute OFBiz startup > commands in background and output to console.log') { String taskName -> > - if(taskName ==~ /^ofbizBackground\s.*/ || taskName == > 'ofbizBackground') { > - createOfbizBackgroundCommandTask(taskName) > - } > -} > - > -tasks.addRule('Pattern: ofbizBackgroundSecure <Commands>: Execute OFBiz > startup commands in background (secure mode) and output to console.log') { > String taskName -> > - if(taskName ==~ /^ofbizBackgroundSecure\s.*/ || taskName == > 'ofbizBackgroundSecure') { > - createOfbizBackgroundCommandTask(taskName) > - } > -} > - > -/* ======================================================== > - * Helper Functions > - * ======================================================== */ > - > -def createOfbizCommandTask(taskName, arguments, jvmArguments, > isDebugMode) { > - > - def ofbizJarName = buildDir.toString()+'/libs/'+project.name+'.jar' > - > - task(type: JavaExec, dependsOn: build, taskName) { > - jvmArgs(jvmArguments) > - debug = isDebugMode > - classpath = files(ofbizJarName) > - main = ofbizMainClass > - arguments.each { argument -> > - args argument > - } > - } > -} > - > -def createOfbizBackgroundCommandTask(taskName) { > - def os = System.getProperty("os.name").toLowerCase() > - def sourceTask = taskName.tokenize().first() > - def arguments = (taskName - sourceTask) > - > - def targetTask > - def gradleRunner > - > - if(sourceTask == 'ofbizBackground') { > - targetTask = 'ofbiz' > - } else if(sourceTask == 'ofbizBackgroundSecure') { > - targetTask = 'ofbizSecure' > - } > - > - if (os.contains("windows")) { > - gradleRunner = 'gradlew' > - } else { > - gradleRunner = './gradlew' > - } > - > - task (taskName) { > - doLast { > - spawnProcess(gradleRunner, "${targetTask} ${arguments}") > - } > - } > -} > - > -def spawnProcess(command, arguments) { > - ProcessBuilder pb = new ProcessBuilder(command, arguments) > - File consoleLog = file("${rootDir}/runtime/logs/console.log"); > - > - pb.directory(file("${rootDir}")) > - pb.redirectErrorStream(true) > - pb.redirectOutput(ProcessBuilder.Redirect.appendTo(consoleLog)) > - pb.start() > -} > - > -def getDirectoryInActiveComponentsIfExists(String dirName) { > - def dirInComponents = [] > - iterateOverActiveComponents { component -> > - def subDir = file(component.toString() + '/' + dirName) > - if(subDir.exists()) { > - dirInComponents.add subDir > - } > - } > - return dirInComponents > -} > - > -def deleteAllInDirWithExclusions(dirName, exclusions) { > - ant.delete (includeEmptyDirs: 'true', verbose: 'on') { > - fileset(dir: dirName, includes: '**/*', erroronmissingdir: > "false") { > - exclusions.each { exclusion -> > - exclude name: exclusion > - } > - } > - } > -} > - > -def getTasksMatchingRegex(theRegex) { > - def filteredTasks = [] > - tasks.each { task -> > - if(task.name ==~ theRegex) { > - filteredTasks.add(task) > - } > - } > - return filteredTasks > -} > - > -def generateFileFromTemplate(templateFileInFullPath, targetDirectory, > filterTokens, newFileName) { > - copy { > - from (templateFileInFullPath) { > - filter ReplaceTokens, tokens: filterTokens > - rename templateFileInFullPath.tokenize('/').last(), > newFileName > - } > - into targetDirectory > - } > -} > - > -def getJarManifestClasspathForCurrentOs() { > - def osClassPath = '' > - if(System.getProperty('os.name').toLowerCase().contains('windows')) { > - configurations.runtime.files.each { cpEntry -> > - osClassPath += '\\' + cpEntry.toString() + ' ' > - } > - } else { > - osClassPath = configurations.runtime.files.collect { "$it" > }.join(' ') > - } > - return osClassPath > -} > +/* > + * Licensed to the Apache Software Foundation (ASF) under one > + * or more contributor license agreements. See the NOTICE file > + * distributed with this work for additional information > + * regarding copyright ownership. The ASF licenses this file > + * to you under the Apache License, Version 2.0 (the > + * "License"); you may not use this file except in compliance > + * with the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, > + * software distributed under the License is distributed on an > + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY > + * KIND, either express or implied. See the License for the > + * specific language governing permissions and limitations > + * under the License. > + */ > +import org.apache.tools.ant.filters.ReplaceTokens > + > +/* ======================================================== > + * Project setup > + * ======================================================== */ > + > +apply plugin: 'java' > +apply plugin: 'eclipse' > + > +apply from: 'common.gradle' > + > +// java settings > +def jvmArguments = ['-Xms128M', '-Xmx512M'] > +ext.ofbizMainClass = 'org.apache.ofbiz.base.start.Start' > +javadoc.failOnError = false > +sourceCompatibility = '1.8' > +targetCompatibility = '1.8' > + > +// root and subproject settings > +defaultTasks 'build' > + > +allprojects { > + repositories{ > + jcenter() > + } > +} > + > +subprojects { > + configurations { > + // compile-time plugin libraries > + pluginLibsCompile > + // runtime plugin libraries > + pluginLibsRuntime > + } > +} > + > +configurations { > + junitLibs > +} > + > +dependencies { > + // general framework libs > + compile 'apache-xerces:resolver:2.9.1' > + compile 'apache-xerces:xercesImpl:2.9.1' > + compile 'avalon-framework:avalon-framework-impl:4.2.0' > + compile 'bouncycastle:bouncycastle-jce-jdk13:112' > + compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.0' > + compile 'com.fasterxml.jackson.core:jackson-core:2.4.2' > + compile 'com.google.guava:guava:19.0' > + compile 'com.google.zxing:core:3.2.1' > + compile > 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.0' > + compile > 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20160628.1' > + compile 'com.ibm.icu:icu4j:57.1' > + compile 'com.lowagie:itext:2.1.7' > + compile 'com.sun.mail:javax.mail:1.5.1' > + compile > 'com.sun.syndication:com.springsource.com.sun.syndication:0.9.0' > + compile 'com.thoughtworks.xstream:xstream:1.4.9' > + compile 'commons-beanutils:commons-beanutils-core:1.8.3' > + compile 'commons-cli:commons-cli:1.3.1' > + compile 'commons-codec:commons-codec:1.10' > + compile 'commons-el:commons-el:1.0' > + compile 'commons-fileupload:commons-fileupload:1.3.1' > + compile 'commons-io:commons-io:2.4' > + compile 'commons-logging:commons-logging:1.2' > + compile 'commons-net:commons-net:3.3' > + compile 'commons-validator:commons-validator:1.5.1' > + compile 'de.odysseus.juel:juel-impl:2.2.7' > + compile 'de.odysseus.juel:juel-spi:2.2.7' > + compile 'httpunit:httpunit:1.7' > + compile 'javax.el:javax.el-api:3.0.1-b04' > + compile 'javax.servlet:javax.servlet-api:3.1.0' > + compile 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.0' > + compile 'javolution:javolution:5.4.3' > + compile 'junit:junit-dep:4.10' > + compile 'jython:jython:2.1' > + compile 'net.fortuna.ical4j:ical4j:1.0-rc3-atlassian-11' > + compile 'net.sf.barcode4j:barcode4j-fop-ext-complete:2.0' > + compile 'net.sf.dozer:dozer:4.2.1' > + compile 'net.sf.ezmorph:ezmorph:0.9.1' > + compile 'net.sourceforge.nekohtml:nekohtml:1.9.16' > + compile 'org.apache.ant:ant-apache-bsf:1.9.0' > + compile 'org.apache.ant:ant-junit:1.9.0' > + compile 'org.apache.ant:ant-launcher:1.9.0' > + compile 'org.apache.axis2:axis2-adb:1.7.1' > + compile 'org.apache.axis2:axis2-kernel:1.7.1' > + compile 'org.apache.axis2:axis2-transport-http:1.7.1' > + compile 'org.apache.axis2:axis2-transport-local:1.7.1' > + compile 'org.apache.bsf:com.springsource.org.apache.bsf:2.4.0' > + compile 'org.apache.commons:commons-collections4:4.1' > + compile 'org.apache.commons:commons-compress:1.11' > + compile 'org.apache.commons:commons-csv:1.1' > + compile 'org.apache.commons:commons-dbcp2:2.1' > + compile 'org.apache.commons:commons-pool2:2.3' > + compile 'org.apache.derby:derby:10.11.1.1' > + compile 'org.apache.geronimo.components:geronimo-transaction:3.1.1' > + compile 'org.apache.geronimo.specs:geronimo-activation_1.0.2_spec:1.0' > + compile > 'org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec:2.0.0' > + compile 'org.apache.geronimo.specs:geronimo-jaxr_1.0_spec:1.0' > + compile 'org.apache.geronimo.specs:geronimo-jaxrpc_1.1_spec:1.1' > + compile 'org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1' > + compile 'org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1' > + compile 'org.apache.geronimo.specs:geronimo-saaj_1.3_spec:1.1' > + compile 'org.apache.httpcomponents:httpclient-cache:4.4.1' > + compile 'org.apache.httpcomponents:httpcore:4.4.1' > + compile 'org.apache.logging.log4j:log4j-1.2-api:2.3' > + compile 'org.apache.logging.log4j:log4j-api:2.3' > + compile 'org.apache.logging.log4j:log4j-core:2.3' > + compile 'org.apache.logging.log4j:log4j-nosql:2.3' > + compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.3' > + compile 'org.apache.neethi:neethi:3.0.3' > + compile 'org.apache.pdfbox:fontbox:1.8.11' > + compile 'org.apache.pdfbox:jempbox:1.8.11' > + compile 'org.apache.pdfbox:pdfbox:1.8.12' > + compile 'org.apache.poi:poi:3.14' > + compile > 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.xpp3:1.1.4c_7' > + compile 'org.apache.shiro:shiro-core:1.2.5' > + compile 'org.apache.tika:tika-core:1.12' > + compile 'org.apache.tika:tika-parsers:1.12' > + compile 'org.apache.tomcat:tomcat-annotations-api:7.0.54' > + compile 'org.apache.tomcat:tomcat-api:8.0.33' > + compile 'org.apache.tomcat:tomcat-catalina-ha:8.0.33' > + compile 'org.apache.tomcat:tomcat-catalina:8.0.33' > + compile 'org.apache.tomcat:tomcat-coyote:8.0.33' > + compile 'org.apache.tomcat:tomcat-jasper:8.0.33' > + compile 'org.apache.tomcat:tomcat-jni:8.0.33' > + compile 'org.apache.tomcat:tomcat-tribes:8.0.33' > + compile 'org.apache.tomcat:tomcat-util-scan:8.0.33' > + compile 'org.apache.tomcat:tomcat-util:8.0.33' > + compile 'org.apache.tomcat.embed:tomcat-embed-websocket:8.0.33' > + compile 'org.apache.tomcat.extras:tomcat-extras-juli-adapters:8.0.33' > + compile 'org.apache.tomcat.extras:tomcat-extras-juli:8.0.33' > + compile 'org.apache.woden:woden-core:1.0M10' > + compile 'org.apache.ws.commons.axiom:axiom-api:1.2.17' > + compile 'org.apache.ws.commons.axiom:axiom-impl:1.2.17' > + compile 'org.apache.ws.commons.util:ws-commons-util:1.0.2' > + compile 'org.apache.ws.xmlschema:xmlschema-core:2.2.1' > + compile > 'org.apache.xalan:com.springsource.org.apache.xml.serializer:2.7.1' > + compile 'org.apache.xmlgraphics:fop:2.1' > + compile 'org.apache.xmlgraphics:xmlgraphics-commons:2.1' > + compile 'org.apache.xmlrpc:xmlrpc-client:3.1.2' > + compile 'org.apache.xmlrpc:xmlrpc-common:3.1.2' > + compile 'org.apache.xmlrpc:xmlrpc-server:3.1.2' > + compile > 'org.codeartisans.thirdparties.swing:batik-all:1.8pre-r1084380' > + compile 'org.codehaus.groovy:groovy-all:2.4.5' > + compile 'org.dom4j:com.springsource.org.dom4j:1.6.1' > + compile 'org.eclipse.jdt.core.compiler:ecj:4.5' > + compile 'org.freemarker:freemarker:2.3.24-incubating' > + compile 'org.hamcrest:hamcrest-all:1.3' > + compile 'org.jdom:jdom:1.1' > + compile 'org.lucee:commons-lang:2.6.0' > + compile 'org.owasp.esapi:esapi:2.1.0' > + compile 'org.slf4j:slf4j-api:1.6.4' > + compile 'org.springframework:spring-core:4.2.3.RELEASE' > + compile 'org.springframework:spring-test:4.2.3.RELEASE' > + compile 'org.zapodot:jackson-databind-java-optional:2.4.2' > + compile 'oro:oro:2.0.8' > + compile 'ws-commons-java5:ws-commons-java5:1.0.1' > + compile 'wsdl4j:wsdl4j:1.6.2' > + compile 'xalan:xalan:2.7.2' > + compile 'xml-apis:xml-apis-ext:1.3.04' > + compile 'xml-apis:xml-apis:1.4.01' > + compile 'mysql:mysql-connector-java:5.1.36' > + compile 'postgresql:postgresql:9.0-801.jdbc4' > + > + > + // plugin libs > + subprojects.each { subProject -> > + compile project(path: subProject.path, configuration: > 'pluginLibsCompile') > + runtime project(path: subProject.path, configuration: > 'pluginLibsRuntime') > + } > + > + // libs needed for junitreport > + junitLibs 'junit:junit:4.12' > + junitLibs 'org.apache.ant:ant-junit:1.9.7' > + junitLibs 'org.apache.ant:ant-junit4:1.9.7' > + > + // local libs > + getDirectoryInActiveComponentsIfExists('lib').each { libDir -> > + compile fileTree(dir: libDir, include: '**/*.jar') > + } > + runtime files("${rootDir}/build/libs/ofbiz-base-test.jar") > +} > + > +def excludedJavaSources = [] > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealEvents.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealPaymentServiceTest.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/orbital/OrbitalPaymentServices.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/paypal/PayPalServices.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayPaymentServices.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayServiceTest.java' > +excludedJavaSources.add > 'org/apache/ofbiz/accounting/thirdparty/verisign/PayflowPro.java' > +excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayInputStream.java' > +excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayOutputStream.java' > +excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeServices.java' > +excludedJavaSources.add > 'org/apache/ofbiz/content/openoffice/OpenOfficeWorker.java' > +excludedJavaSources.add > 'org/apache/ofbiz/content/report/JREntityListIteratorDataSource.java' > +excludedJavaSources.add > 'org/apache/ofbiz/content/report/JRMapCollectionDataSource.java' > +excludedJavaSources.add > 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareException.java' > +excludedJavaSources.add > 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareServices.java' > +excludedJavaSources.add > 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareUTL.java' > +excludedJavaSources.add 'ShipmentScaleApplet.java' > +excludedJavaSources.add > 'org/apache/ofbiz/securityext/thirdparty/truition/TruitionCoReg.java' > +excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsJXlsViewHandler.java' > +excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsPdfViewHandler.java' > +excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsPoiXlsViewHandler.java' > +excludedJavaSources.add > 'org/apache/ofbiz/webapp/view/JasperReportsXmlViewHandler.java' > + > +sourceSets { > + main { > + java { > + srcDirs = > getDirectoryInActiveComponentsIfExists('src/main/java') > + exclude excludedJavaSources > + } > + resources { > + srcDirs = > getDirectoryInActiveComponentsIfExists('src/main/java') > + srcDirs += getDirectoryInActiveComponentsIfExists('config') > + exclude excludedJavaSources > + } > + } > + > + test { > + java { > + srcDirs = > getDirectoryInActiveComponentsIfExists('src/test/java') > + } > + resources { > + srcDirs = > getDirectoryInActiveComponentsIfExists('src/test/java') > + } > + } > +} > + > +jar { > + manifest { > + attributes( > + "Implementation-Title": project.name, > + "Main-Class": ofbizMainClass, > + "Class-Path": getJarManifestClasspathForCurrentOs() > + ) > + } > +} > + > +// Eclipse plugin settings > +eclipse.classpath.file.whenMerged { classpath -> > + /* The code inside this block removes unnecessary entries > + * in the .classpath file which are generated automatically > + * due to the settings in the sourceSets block > + */ > + def osName = System.getProperty('os.name').toLowerCase() > + def osDirSeparator = osName.contains('windows') ? '\\' : '/' > + > + iterateOverActiveComponents { component -> > + def componentName = component.toString() - rootDir.toString() > + classpath.entries.removeAll { entry -> > + // remove any "src" entries in .classpath of the form > /componentName > + entry.kind == 'src' && > + entry.path ==~ '.*/+(' + > componentName.tokenize(osDirSeparator).last() + ')$' > + } > + } > + classpath.entries.removeAll { entry -> > + /* remove "src" entries in .classpath named: > + * /framework, /applications, /specialpurpose and /hot-deploy > + */ > + entry.kind == 'src' && > + entry.path ==~ /(\/+framework)$/ || > + entry.path ==~ /(\/+applications)$/ || > + entry.path ==~ /(\/+specialpurpose)$/ || > + entry.path ==~ /(\/+hot-deploy)$/ > + } > + getDirectoryInActiveComponentsIfExists('config').each { configDir -> > + /* remove any "src" entries in .classpath of the form > componentName/config > + * > + * windows format: \framework\base\config > + * Unix format: /framework/base/config > + * .classpath format: framework/base/config > + * > + * Must convert both windows and unix to .classpath format to > + * be able to remove it from the file > + */ > + def relativeDir = configDir.toString() - rootDir.toString() - > osDirSeparator > + def eclipseConfigSrc = osName.contains('windows') ? > relativeDir.replaceAll("\\\\", "/") : relativeDir > + classpath.entries.removeAll { entry -> > + entry.kind == 'src' && > + entry.path == eclipseConfigSrc > + } > + } > +} > +tasks.eclipse.dependsOn(cleanEclipse) > + > +/* ======================================================== > + * Tasks > + * ======================================================== */ > + > +// ========== Task group labels ========== > +def cleanupGroup = 'Cleaning' > +def ofbizServer = 'OFBiz Server' > +def sysadminGroup = 'System Administration' > +def committerGroup = 'OFBiz committers' > + > +// ========== OFBiz Server tasks ========== > + > +task loadDefault(group: ofbizServer) { > + dependsOn 'ofbiz --load-data' > + description 'Load default data; meant for OFBiz development, testing, > and demo purposes' > +} > + > +task testIntegration(group: ofbizServer) { > + dependsOn 'ofbiz --test' > + description 'Run OFBiz integration tests; You must run loadDefault > before running this task' > +} > + > +task terminateOfbiz(group: ofbizServer, > + description: 'Force termination of any running OFBiz servers, only > use if \"--shutdown\" command fails') << { > + def os = System.getProperty("os.name").toLowerCase() > + if (os.contains("windows")) { > + Runtime.getRuntime().exec("wmic process where \"CommandLine Like > \'%org.apache.ofbiz.base.start.Start%\'\" Call Terminate") > + } else { > + def processOutput = new ByteArrayOutputStream() > + exec { > + commandLine 'ps', 'ax' > + standardOutput = processOutput > + } > + processOutput.toString().split(System.lineSeparator()).each { > line -> > + if(line ==~ /.*org\.apache\.ofbiz\.base\.start\.Start.*/) { > + exec { commandLine 'kill', '-9', line.tokenize().first() } > + } > + } > + } > +} > + > +task loadAdminUserLogin(group: ofbizServer) { > + description 'Create admin user with temporary password equal to > ofbiz. You must provide userLoginId' > + createOfbizCommandTask('executeLoadAdminUser', > + ['--load-data', 'file=/runtime/tmp/AdminUserLoginData.xml'], > + jvmArguments, false) > + executeLoadAdminUser.doFirst { > + copy { > + from > ("${rootDir}/framework/resources/templates/AdminUserLoginData.xml") { > + filter(ReplaceTokens, tokens: [userLoginId: userLoginId]) > + } > + into "${rootDir}/runtime/tmp/" > + } > + } > + dependsOn executeLoadAdminUser > + doLast { > + delete("${rootDir}/runtime/tmp/AdminUserLoginData.xml") > + } > +} > + > +task loadTenant(group: ofbizServer, description: 'Load data using > tenantId') { > + > + createOfbizCommandTask('executeLoadTenant', [], jvmArguments, false) > + > + if(project.hasProperty('tenantId')) { > + executeLoadTenant.args '--load-data' > + executeLoadTenant.args "delegator=default#${tenantId}" > + } > + if(project.hasProperty('tenantReaders')) { > + executeLoadTenant.args '--load-data' > + executeLoadTenant.args "readers=${tenantReaders}" > + } > + if(project.hasProperty('tenantComponent')) { > + executeLoadTenant.args '--load-data' > + executeLoadTenant.args "component=${tenantComponent}" > + } > + > + doLast { > + if(!project.hasProperty('tenantId')) { > + throw new GradleException('Missing project property tenantId') > + } > + } > + dependsOn executeLoadTenant > +} > + > +task createTenant(group: ofbizServer, description: 'Create a new tenant > in your environment') { > + > + def databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" > + > + task prepareAndValidateTenantArguments << { > + if(!project.hasProperty('tenantId')) { > + throw new GradleException('Project property tenantId is > missing') > + } > + if(!project.hasProperty('tenantName')) { > + throw new GradleException('Project property tenantName is > missing') > + } > + // dbPlatform values: D(Derby), M(MySQL), O(Oracle), > P(PostgreSQL) (default D) > + if(project.hasProperty('dbPlatform')) { > + if(dbPlatform == 'D') { > + databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" > + } else if(dbPlatform == 'M') { > + databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-MySQL.xml" > + } else if(dbPlatform == 'O') { > + databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-Oracle.xml" > + } else if(dbPlatform == 'P') { > + databaseTemplateFile = > "${rootDir}/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml" > + } else { > + throw new GradleException('Invalid value for property > dbPlatform: ' + "${dbPlatform}") > + } > + } > + } > + > + task generateDatabaseTemplateFile(dependsOn: > prepareAndValidateTenantArguments) << { > + def filterTokens = ['tenantId': tenantId, > + 'tenantName': tenantName, > + 'domainName': project.hasProperty('domainName')? > "${domainName}":'org.apache.ofbiz', > + 'db-IP': project.hasProperty('dbIp')? "${dbIp}":'', > + 'db-User': project.hasProperty('dbUser')? "${dbUser}":'', > + 'db-Password': project.hasProperty('dbPassword')? > "${dbPassword}":''] > + > + generateFileFromTemplate(databaseTemplateFile, 'runtime/tmp', > + filterTokens, 'tmpFilteredTenantData.xml') > + } > + > + task generateAdminUserTemplateFile(dependsOn: > prepareAndValidateTenantArguments) << { > + generateFileFromTemplate( > + > "${rootDir}/framework/resources/templates/AdminUserLoginData.xml", > + 'runtime/tmp', > + ['userLoginId': "${tenantId}-admin".toString()], > + 'tmpFilteredUserLogin.xml') > + } > + > + // Load the tenants master database > + createOfbizCommandTask('loadTenantOnDefaultDelegator', > + ['--load-data', 'file=/runtime/tmp/tmpFilteredTenantData.xml'], > + jvmArguments, false) > + loadTenantOnDefaultDelegator.dependsOn(generateDatabaseTemplateFile, > generateAdminUserTemplateFile) > + > + // Load the actual tenant data > + createOfbizCommandTask('loadTenantData', [], jvmArguments, false) > + loadTenantData.dependsOn(loadTenantOnDefaultDelegator) > + > + // Load the tenant admin user account > + createOfbizCommandTask('loadTenantAdminUserLogin', [], jvmArguments, > false) > + loadTenantAdminUserLogin.dependsOn(loadTenantData) > + > + /* pass arguments to tasks, must be done this way > + * because we are in the configuration phase. We cannot > + * set the parameters at the execution phase. */ > + if(project.hasProperty('tenantId')) { > + loadTenantData.args '--load-data' > + loadTenantData.args "delegator=default#${tenantId}" > + > + loadTenantAdminUserLogin.args '--load-data' > + loadTenantAdminUserLogin.args "delegator=default#${tenantId}" > + loadTenantAdminUserLogin.args '--load-data' > + loadTenantAdminUserLogin.args > "file=${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml" > + } > + if(project.hasProperty('tenantReaders')) { > + loadTenantData.args '--load-data' > + loadTenantData.args "readers=${tenantReaders}" > + } > + > + dependsOn(loadTenantAdminUserLogin) > + > + // cleanup > + doLast { > + delete("${rootDir}/runtime/tmp/tmpFilteredTenantData.xml") > + delete("${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml") > + } > +} > + > +// ========== System Administration tasks ========== > +task createComponent(group: sysadminGroup, description: 'Create the > layout of an OFBiz component in the hot-deploy folder.') << { > + > + def filterTokens = ['component-name': componentName, > + 'component-resource-name': componentResourceName, > + 'webapp-name': webappName, > + 'base-permission': basePermission] > + def templateDir = "${rootDir}/framework/resources/templates" > + def componentDir = "${rootDir}/hot-deploy/${componentName}" > + > + logger.info('Creating a component with the following properties: ') > + logger.info(" - componentName: ${componentName}") > + logger.info(" - componentResourceName: ${componentResourceName}") > + logger.info(" - webappName: ${webappName}") > + logger.info(" - basePermission: ${basePermission}") > + > + mkdir componentDir > + mkdir componentDir+"/config" > + mkdir componentDir+"/data" > + mkdir componentDir+"/data/helpdata" > + mkdir componentDir+"/dtd" > + mkdir componentDir+"/documents" > + mkdir componentDir+"/entitydef" > + mkdir componentDir+"/lib" > + mkdir componentDir+"/patches" > + mkdir componentDir+"/patches/test" > + mkdir componentDir+"/patches/qa" > + mkdir componentDir+"/patches/production" > + mkdir componentDir+"/script" > + mkdir componentDir+"/servicedef" > + mkdir componentDir+"/src" > + mkdir componentDir+"/testdef" > + mkdir componentDir+"/webapp" > + mkdir componentDir+"/webapp/${webappName}" > + mkdir componentDir+"/webapp/${webappName}/error" > + mkdir componentDir+"/webapp/${webappName}/WEB-INF" > + mkdir componentDir+"/webapp/${webappName}/WEB-INF/actions" > + mkdir componentDir+"/widget/" > + > + generateFileFromTemplate(templateDir+"/ofbiz-component.xml", > componentDir, > + filterTokens, "ofbiz-component.xml") > + generateFileFromTemplate(templateDir+"/TypeData.xml", > componentDir+"/data", > + filterTokens, "${componentResourceName}TypeData.xml") > + > generateFileFromTemplate(templateDir+"/SecurityPermissionSeedData.xml", > componentDir+"/data", > + filterTokens, > "${componentResourceName}SecurityPermissionSeedData.xml") > + generateFileFromTemplate(templateDir+"/SecurityGroupDemoData.xml", > componentDir+"/data", > + filterTokens, "${componentResourceName}SecurityGroupDemoData.xml") > + generateFileFromTemplate(templateDir+"/DemoData.xml", > componentDir+"/data", > + filterTokens, "${componentResourceName}DemoData.xml") > + generateFileFromTemplate(templateDir+"/HELP.xml", > componentDir+"/data/helpdata", > + filterTokens, "HELP_${componentResourceName}.xml") > + generateFileFromTemplate(templateDir+"/document.xml", > componentDir+"/documents", > + filterTokens, "${componentResourceName}.xml") > + generateFileFromTemplate(templateDir+"/entitymodel.xml", > componentDir+"/entitydef", > + filterTokens, "entitymodel.xml") > + generateFileFromTemplate(templateDir+"/services.xml", > componentDir+"/servicedef", > + filterTokens, "services.xml") > + generateFileFromTemplate(templateDir+"/Tests.xml", > componentDir+"/testdef", > + filterTokens, "${componentResourceName}Tests.xml") > + generateFileFromTemplate(templateDir+"/UiLabels.xml", > componentDir+"/config", > + filterTokens, "${componentResourceName}UiLabels.xml") > + generateFileFromTemplate(templateDir+"/index.jsp", > componentDir+"/webapp/${webappName}", > + filterTokens, "index.jsp") > + generateFileFromTemplate(templateDir+"/error.jsp", > componentDir+"/webapp/${webappName}/error", > + filterTokens, "error.jsp") > + generateFileFromTemplate(templateDir+"/controller.xml", > componentDir+"/webapp/${webappName}/WEB-INF", > + filterTokens, "controller.xml") > + generateFileFromTemplate(templateDir+"/web.xml", > componentDir+"/webapp/${webappName}/WEB-INF", > + filterTokens, "web.xml") > + generateFileFromTemplate(templateDir+"/CommonScreens.xml", > componentDir+"/widget", > + filterTokens, "CommonScreens.xml") > + generateFileFromTemplate(templateDir+"/Screens.xml", > componentDir+"/widget", > + filterTokens, "${componentResourceName}Screens.xml") > + generateFileFromTemplate(templateDir+"/Menus.xml", > componentDir+"/widget", > + filterTokens, "${componentResourceName}Menus.xml") > + generateFileFromTemplate(templateDir+"/Forms.xml", > componentDir+"/widget", > + filterTokens, "${componentResourceName}Forms.xml") > + > + logger.info("Component successfully created in folder > ${rootDir}/hot-deploy/${componentName}.") > + logger.info("Restart OFBiz and then visit the URL: > https://localhost:8443/${webappName}") > +} > + > +task createTestReports(group: sysadminGroup, description: 'Generate HTML > reports from junit XML output') << { > + ant.taskdef(name: 'junitreport', > + classname: > 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator', > + classpath: configurations.junitLibs.asPath) > + ant.junitreport(todir: './runtime/logs/test-results') { > + fileset(dir: './runtime/logs/test-results') { > + include(name: '*.xml') > + } > + report(format:'frames', todir:'./runtime/logs/test-results/html') > + } > +} > +/* > + * TODO replace this code with something more declarative. > + * We are using it so that if tests fail we still get HTML reports > + */ > +gradle.taskGraph.afterTask { Task task, TaskState state -> > + if (task.name ==~ /^ofbiz.*--test.*/ > + || task.name ==~ /^ofbiz.*-t.*/) { > + tasks.createTestReports.execute() > + } > +} > + > +// ========== Clean up tasks ========== > +task cleanCatalina(group: cleanupGroup, description: 'Clean Catalina data > in runtime/catalina/work') << { > + delete "${rootDir}/runtime/catalina/work" > +} > +task cleanData(group: cleanupGroup, description: 'Clean all DB data > (Derby) under runtime/data') << { > + deleteAllInDirWithExclusions("${rootDir}/runtime/data/", ['README', > 'derby.properties']) > +} > +task cleanDownloads(group: cleanupGroup, description: 'Clean all > downloaded files') << { > + delete fileTree(dir: "${rootDir}/framework/base/lib", includes: > ['activemq-*.jar']) > + delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", > includes: ['postgresql-*.jar']) > + delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", > includes: ['mysql-*.jar']) > +} > +task cleanLogs(group: cleanupGroup, description: 'Clean all logs in > runtime/logs') << { > + deleteAllInDirWithExclusions("${rootDir}/runtime/logs/", ['README']) > +} > +task cleanOutput(group: cleanupGroup, description: 'Clean runtime/output > directory') << { > + deleteAllInDirWithExclusions("${rootDir}/runtime/output/", ['README']) > +} > +task cleanIndexes(group: cleanupGroup, description: 'Remove search > indexes (e.g. Lucene) from runtime/indexes') << { > + deleteAllInDirWithExclusions("${rootDir}/runtime/indexes/", > ['README', 'index.properties']) > +} > +task cleanTempfiles(group: cleanupGroup, description: 'Remove file in > runtime/tempfiles') << { > + deleteAllInDirWithExclusions("${rootDir}/runtime/tempfiles/", > ['README']) > + deleteAllInDirWithExclusions("${rootDir}/runtime/tmp/", ['README']) > +} > +task cleanUploads(group: cleanupGroup, description: 'Remove uploaded > files.') << { > + deleteAllInDirWithExclusions("${rootDir}/runtime/uploads/", []) > +} > +task cleanXtra(group: cleanupGroup, description: 'Clean extra generated > files like .rej, .DS_Store, etc.') << { > + delete fileTree(dir: "${rootDir}", includes: ['**/.nbattrs', > '**/*~','**/.#*', '**/.DS_Store', '**/*.rej', '**/*.orig']) > +} > +task cleanGradle(group: cleanupGroup, description: 'clean generated files > from Gradle') << { > + delete file("${rootDir}/.gradle") > +} > + > +def cleanTasks = getTasksMatchingRegex(/^clean.+/) > +task cleanAll(group: cleanupGroup, dependsOn: [cleanTasks, clean]) { > + description 'Execute all cleaning tasks.' > +} > + > +task cleanAntBuild(type: Delete, description: "Sort Term Task: clean old > build dirs generated by Ant and the old ofbiz.jar in OFBiz root dir, see > OFBIZ-7898") { > + FileCollection applicationsBuildDirs = > files("${rootDir}/applications/content/build.xml", > "${rootDir}/applications/party/build.xml", > "${rootDir}/applications/workeffort/build.xml", > + "${rootDir}/applications/product/build.xml", > "${rootDir}/applications/marketing/build.xml", > "${rootDir}/applications/order/build.xml", > "${rootDir}/applications/manufacturing/build.xml", > + "${rootDir}/applications/accounting/build.xml", > "${rootDir}/applications/securityext/build.xml", "${rootDir}/applications/ > humanres/build.xml") > + > + > + FileCollection frameworkBuildDirs = > files("${rootDir}/framework/start/build.xml,base/build.xml", > "${rootDir}/framework/entity/build.xml", > "${rootDir}/framework/geronimo/build.xml", > + "${rootDir}/framework/catalina/build.xml", > "${rootDir}/framework/security/build.xml", > "${rootDir}/framework/service/build.xml", > "${rootDir}/framework/entityext/build.xml", > + "${rootDir}/framework/minilang/build.xml", > "${rootDir}/framework/webapp/build.xml", > "${rootDir}/framework/widget/build.xml", > "${rootDir}/framework/common/build.xml", > + "${rootDir}/framework/datafile/build.xml", > "${rootDir}/framework/testtools/build.xml", > "${rootDir}/framework/webtools/build.xml") > + > + FileCollection specialpurposeBuildDirs = > files("${rootDir}/specialpurpose/assetmaint/build.xml", > "${rootDir}/specialpurpose/birt/build.xml", > "${rootDir}/specialpurpose/ebay/build.xml", > + "${rootDir}/specialpurpose/ebaystore/build.xml", > "${rootDir}/specialpurpose/ecommerce/build.xml", > "${rootDir}/specialpurpose/example/build.xml", > "${rootDir}/specialpurpose/hhfacility/build.xml", > + "${rootDir}/specialpurpose/ldap/build.xml", > "${rootDir}/specialpurpose/lucene/build.xml", > "${rootDir}/specialpurpose/solr/build.xml", > "${rootDir}/specialpurpose/oagis/build.xml", > + "${rootDir}/specialpurpose/pos/build.xml", > "${rootDir}/specialpurpose/projectmgr/build.xml", > "${rootDir}/specialpurpose/scrum/build.xml", > "${rootDir}/specialpurpose/bi/build.xml", > + "${rootDir}/specialpurpose/ webpos/build.xml", > "${rootDir}/specialpurpose/passport/build.xml") > + > + FileCollection buildDirs = files("ofbiz.jar") + > applicationsBuildDirs + frameworkBuildDirs + specialpurposeBuildDirs > + > + delete(buildDirs) > +} > + > +// ========== Tasks for OFBiz committers ========== > +def websiteDir = "${rootDir}/../site" > +task copyDtds(group: committerGroup, description: 'Copy all DTDs from > OFBiz instance to website') << { > + mkdir websiteDir+'/dtds' > + copy { > + from(fileTree("${rootDir}").files) { > + include '**/*.xsd' > + exclude '**/002*.xsd' > + exclude '**/068*.xsd' > + exclude '**/161*.xsd' > + exclude '**/196*.xsd' > + exclude '**/197*.xsd' > + } > + into websiteDir+'/dtds' > + } > +} > + > +task gitInfoFooter(group: committerGroup, description: 'Update the Git > Branch-revision info in the footer') << { > + def branch > + def revision > + def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' > + File gitFooterFile = new File("${rootDir}/runtime/GitInfo.ftl") > + > + def branchOutput = new ByteArrayOutputStream() > + exec{ > + commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD' > + standardOutput = branchOutput > + } > + branch = branchOutput.toString() > + def revisionOutput = new ByteArrayOutputStream() > + exec{ > + commandLine 'git', 'rev-parse', 'HEAD' > + standardOutput = revisionOutput > + } > + revision = revisionOutput.toString() > + gitFooterFile.delete() > + gitFooterFile.createNewFile() > + gitFooterFile << "Branch: ${branch}" > + gitFooterFile << "Revision: ${revision}" > + gitFooterFile << "Built on: ${timestamp}" + System.lineSeparator() > + gitFooterFile << "Java Version: > ${org.gradle.internal.jvm.Jvm.current()}" > +} > + > +task svnInfoFooter(group: committerGroup, description: 'Update the > Subversion revision info in the footer') << { > + def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' > + File svnFooterFile = new File("${rootDir}/runtime/SvnInfo.ftl") > + def svnOutput = new ByteArrayOutputStream() > + exec{ > + commandLine 'svn', 'info', '--xml' > + standardOutput = svnOutput > + } > + def info = new XmlParser().parseText(svnOutput.toString()) > + svnFooterFile.delete() > + svnFooterFile.createNewFile() > + svnFooterFile << "Branch: ${info.entry.url.text()}" + > System.lineSeparator() > + svnFooterFile << "Revision: ${info.entry.commit.@revision}" + > System.lineSeparator() > + svnFooterFile << "Built on: ${timestamp}" + System.lineSeparator() > + svnFooterFile << "Java Version: > ${org.gradle.internal.jvm.Jvm.current()}" > +} > + > +// ========== hidden support tasks ========== > + > +/* without executing this task, a test would fail that is named > + * > org.apache.ofbiz.base.util.test.UtilObjectTests.testGetObjectFromFactory() > + * > + * The test fails because it requires defining a service provider, read > more below. > + * > http://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider > + */ > +task createBaseTestServiceProviderJar << { > + ant.jar(destfile: "${rootDir}/build/libs/ofbiz-base-test.jar") { > + service(type: > 'org.apache.ofbiz.base.util.test.UtilObjectTests$TestFactoryIntf') { > + provider(classname: > 'org.apache.ofbiz.base.util.test.UtilObjectTests$FirstTestFactory') > + provider(classname: > 'org.apache.ofbiz.base.util.test.UtilObjectTests$SecondTestFactory') > + } > + } > +} > +classes.dependsOn createBaseTestServiceProviderJar > + > +/* ======================================================== > + * Rules-based OFBiz server commands > + * ======================================================== */ > + > +tasks.addRule('Pattern: ofbiz <Commands>: Execute OFBiz startup > commands') { String taskName -> > + if(taskName ==~ /^ofbiz\s.*/ || taskName == 'ofbiz') { > + def arguments = (taskName - 'ofbiz').toLowerCase().tokenize(' ') > + createOfbizCommandTask(taskName, arguments, jvmArguments, false) > + } > +} > + > +tasks.addRule('Pattern: ofbizDebug <Commands>: Execute OFBiz startup > commands in remote debug mode') { String taskName -> > + if(taskName ==~ /^ofbizDebug\s.*/ || taskName == 'ofbizDebug') { > + def arguments = (taskName - > 'ofbizDebug').toLowerCase().tokenize(' ') > + createOfbizCommandTask(taskName, arguments, jvmArguments, true) > + } > +} > + > +tasks.addRule('Pattern: ofbizSecure <Commands>: Execute OFBiz startup > commands pre-loading the notsoserial Java agent') { String taskName -> > + if(taskName ==~ /^ofbizSecure\s.*/ || taskName == 'ofbizSecure') { > + def arguments = (taskName - > 'ofbizSecure').toLowerCase().tokenize(' ') > + jvmArguments.add('-server') > + > jvmArguments.add("-javaagent:${rootDir}/tools/security/notsoserial/notsoserial-1.0-SNAPSHOT.jar") > + > jvmArguments.add("-Dnotsoserial.whitelist=${rootDir}/tools/security/notsoserial/empty.txt") > + > jvmArguments.add("-Dnotsoserial.dryrun=${rootDir}/tools/security/notsoserial/is-deserialized.txt") > + > jvmArguments.add("-Dnotsoserial.trace=${rootDir}/tools/security/notsoserial/deserialize-trace.txt") > + createOfbizCommandTask(taskName, arguments, jvmArguments, false) > + } > +} > + > +tasks.addRule('Pattern: ofbizBackground <Commands>: Execute OFBiz startup > commands in background and output to console.log') { String taskName -> > + if(taskName ==~ /^ofbizBackground\s.*/ || taskName == > 'ofbizBackground') { > + createOfbizBackgroundCommandTask(taskName) > + } > +} > + > +tasks.addRule('Pattern: ofbizBackgroundSecure <Commands>: Execute OFBiz > startup commands in background (secure mode) and output to console.log') { > String taskName -> > + if(taskName ==~ /^ofbizBackgroundSecure\s.*/ || taskName == > 'ofbizBackgroundSecure') { > + createOfbizBackgroundCommandTask(taskName) > + } > +} > + > +/* ======================================================== > + * Helper Functions > + * ======================================================== */ > + > +def createOfbizCommandTask(taskName, arguments, jvmArguments, > isDebugMode) { > + > + def ofbizJarName = buildDir.toString()+'/libs/'+project.name+'.jar' > + > + task(type: JavaExec, dependsOn: build, taskName) { > + jvmArgs(jvmArguments) > + debug = isDebugMode > + classpath = files(ofbizJarName) > + main = ofbizMainClass > + arguments.each { argument -> > + args argument > + } > + } > +} > + > +def createOfbizBackgroundCommandTask(taskName) { > + def os = System.getProperty("os.name").toLowerCase() > + def sourceTask = taskName.tokenize().first() > + def arguments = (taskName - sourceTask) > + > + def targetTask > + def gradleRunner > + > + if(sourceTask == 'ofbizBackground') { > + targetTask = 'ofbiz' > + } else if(sourceTask == 'ofbizBackgroundSecure') { > + targetTask = 'ofbizSecure' > + } > + > + if (os.contains("windows")) { > + gradleRunner = 'gradlew' > + } else { > + gradleRunner = './gradlew' > + } > + > + task (taskName) { > + doLast { > + spawnProcess(gradleRunner, "${targetTask} ${arguments}") > + } > + } > +} > + > +def spawnProcess(command, arguments) { > + ProcessBuilder pb = new ProcessBuilder(command, arguments) > + File consoleLog = file("${rootDir}/runtime/logs/console.log"); > + > + pb.directory(file("${rootDir}")) > + pb.redirectErrorStream(true) > + pb.redirectOutput(ProcessBuilder.Redirect.appendTo(consoleLog)) > + pb.start() > +} > + > +def getDirectoryInActiveComponentsIfExists(String dirName) { > + def dirInComponents = [] > + iterateOverActiveComponents { component -> > + def subDir = file(component.toString() + '/' + dirName) > + if(subDir.exists()) { > + dirInComponents.add subDir > + } > + } > + return dirInComponents > +} > + > +def deleteAllInDirWithExclusions(dirName, exclusions) { > + ant.delete (includeEmptyDirs: 'true', verbose: 'on') { > + fileset(dir: dirName, includes: '**/*', erroronmissingdir: > "false") { > + exclusions.each { exclusion -> > + exclude name: exclusion > + } > + } > + } > +} > + > +def getTasksMatchingRegex(theRegex) { > + def filteredTasks = [] > + tasks.each { task -> > + if(task.name ==~ theRegex) { > + filteredTasks.add(task) > + } > + } > + return filteredTasks > +} > + > +def generateFileFromTemplate(templateFileInFullPath, targetDirectory, > filterTokens, newFileName) { > + copy { > + from (templateFileInFullPath) { > + filter ReplaceTokens, tokens: filterTokens > + rename templateFileInFullPath.tokenize('/').last(), > newFileName > + } > + into targetDirectory > + } > +} > + > +def getJarManifestClasspathForCurrentOs() { > + def osClassPath = '' > + if(System.getProperty('os.name').toLowerCase().contains('windows')) { > + configurations.runtime.files.each { cpEntry -> > + osClassPath += '\\' + cpEntry.toString() + ' ' > + } > + } else { > + osClassPath = configurations.runtime.files.collect { "$it" > }.join(' ') > + } > + return osClassPath > +} > > > |
Administrator
|
We forgot that http://svn.apache.org/viewvc?view=revision&revision=1753367
I also fixed the "OFBIZ Subversion client configuration file" link at https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=7766052&selectedPageVersions=82&selectedPageVersions=81 Also I was long to answer because I got a 3 hours POP outage this morning :/ Jacques Le 19/07/2016 à 13:11, Pierre Smits a écrit : > Hi Jacques, > > What happened? It seems to have touched everything in the gradle.build, > making it hard to review. > > Best regards, > > Pierre Smits > > ORRTIZ.COM <http://www.orrtiz.com> > OFBiz based solutions & services > > OFBiz Extensions Marketplace > http://oem.ofbizci.net/oci-2/ > > On Tue, Jul 19, 2016 at 12:41 PM, <[hidden email]> wrote: > >> Author: jleroux >> Date: Tue Jul 19 10:41:28 2016 >> New Revision: 1753360 >> >> URL: http://svn.apache.org/viewvc?rev=1753360&view=rev >> Log: >> Creates a (short term) Gradle "cleanAnt" task to remove old build dirs - >> https://issues.apache.org/jira/browse/OFBIZ-7898 >> >> This adapts the "old" Ant "clean*" targets in order to allow to remove old >> build dirs. It's not a problem if you have done an Ant clean just before >> removing Ant whith a "svn up" but I guess most of us did not. >> >> I will then also remove the related svn:ignore (build dirs)... WIP... >> >> Modified: >> ofbiz/trunk/build.gradle >> >> Modified: ofbiz/trunk/build.gradle >> URL: >> http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753360&r1=1753359&r2=1753360&view=diff >> >> ============================================================================== >> --- ofbiz/trunk/build.gradle (original) >> +++ ofbiz/trunk/build.gradle Tue Jul 19 10:41:28 2016 >> @@ -1,850 +1,872 @@ >> -/* >> - * Licensed to the Apache Software Foundation (ASF) under one >> - * or more contributor license agreements. See the NOTICE file >> - * distributed with this work for additional information >> - * regarding copyright ownership. The ASF licenses this file >> - * to you under the Apache License, Version 2.0 (the >> - * "License"); you may not use this file except in compliance >> - * with the License. You may obtain a copy of the License at >> - * >> - * http://www.apache.org/licenses/LICENSE-2.0 >> - * >> - * Unless required by applicable law or agreed to in writing, >> - * software distributed under the License is distributed on an >> - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >> - * KIND, either express or implied. See the License for the >> - * specific language governing permissions and limitations >> - * under the License. >> - */ >> -import org.apache.tools.ant.filters.ReplaceTokens >> - >> -/* ======================================================== >> - * Project setup >> - * ======================================================== */ >> - >> -apply plugin: 'java' >> -apply plugin: 'eclipse' >> - >> -apply from: 'common.gradle' >> - >> -// java settings >> -def jvmArguments = ['-Xms128M', '-Xmx512M'] >> -ext.ofbizMainClass = 'org.apache.ofbiz.base.start.Start' >> -javadoc.failOnError = false >> -sourceCompatibility = '1.8' >> -targetCompatibility = '1.8' >> - >> -// root and subproject settings >> -defaultTasks 'build' >> - >> -allprojects { >> - repositories{ >> - jcenter() >> - } >> -} >> - >> -subprojects { >> - configurations { >> - // compile-time plugin libraries >> - pluginLibsCompile >> - // runtime plugin libraries >> - pluginLibsRuntime >> - } >> -} >> - >> -configurations { >> - junitLibs >> -} >> - >> -dependencies { >> - // general framework libs >> - compile 'apache-xerces:resolver:2.9.1' >> - compile 'apache-xerces:xercesImpl:2.9.1' >> - compile 'avalon-framework:avalon-framework-impl:4.2.0' >> - compile 'bouncycastle:bouncycastle-jce-jdk13:112' >> - compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.0' >> - compile 'com.fasterxml.jackson.core:jackson-core:2.4.2' >> - compile 'com.google.guava:guava:19.0' >> - compile 'com.google.zxing:core:3.2.1' >> - compile >> 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.0' >> - compile >> 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20160628.1' >> - compile 'com.ibm.icu:icu4j:57.1' >> - compile 'com.lowagie:itext:2.1.7' >> - compile 'com.sun.mail:javax.mail:1.5.1' >> - compile >> 'com.sun.syndication:com.springsource.com.sun.syndication:0.9.0' >> - compile 'com.thoughtworks.xstream:xstream:1.4.9' >> - compile 'commons-beanutils:commons-beanutils-core:1.8.3' >> - compile 'commons-cli:commons-cli:1.3.1' >> - compile 'commons-codec:commons-codec:1.10' >> - compile 'commons-el:commons-el:1.0' >> - compile 'commons-fileupload:commons-fileupload:1.3.1' >> - compile 'commons-io:commons-io:2.4' >> - compile 'commons-logging:commons-logging:1.2' >> - compile 'commons-net:commons-net:3.3' >> - compile 'commons-validator:commons-validator:1.5.1' >> - compile 'de.odysseus.juel:juel-impl:2.2.7' >> - compile 'de.odysseus.juel:juel-spi:2.2.7' >> - compile 'httpunit:httpunit:1.7' >> - compile 'javax.el:javax.el-api:3.0.1-b04' >> - compile 'javax.servlet:javax.servlet-api:3.1.0' >> - compile 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.0' >> - compile 'javolution:javolution:5.4.3' >> - compile 'junit:junit-dep:4.10' >> - compile 'jython:jython:2.1' >> - compile 'net.fortuna.ical4j:ical4j:1.0-rc3-atlassian-11' >> - compile 'net.sf.barcode4j:barcode4j-fop-ext-complete:2.0' >> - compile 'net.sf.dozer:dozer:4.2.1' >> - compile 'net.sf.ezmorph:ezmorph:0.9.1' >> - compile 'net.sourceforge.nekohtml:nekohtml:1.9.16' >> - compile 'org.apache.ant:ant-apache-bsf:1.9.0' >> - compile 'org.apache.ant:ant-junit:1.9.0' >> - compile 'org.apache.ant:ant-launcher:1.9.0' >> - compile 'org.apache.axis2:axis2-adb:1.7.1' >> - compile 'org.apache.axis2:axis2-kernel:1.7.1' >> - compile 'org.apache.axis2:axis2-transport-http:1.7.1' >> - compile 'org.apache.axis2:axis2-transport-local:1.7.1' >> - compile 'org.apache.bsf:com.springsource.org.apache.bsf:2.4.0' >> - compile 'org.apache.commons:commons-collections4:4.1' >> - compile 'org.apache.commons:commons-compress:1.11' >> - compile 'org.apache.commons:commons-csv:1.1' >> - compile 'org.apache.commons:commons-dbcp2:2.1' >> - compile 'org.apache.commons:commons-pool2:2.3' >> - compile 'org.apache.derby:derby:10.11.1.1' >> - compile 'org.apache.geronimo.components:geronimo-transaction:3.1.1' >> - compile 'org.apache.geronimo.specs:geronimo-activation_1.0.2_spec:1.0' >> - compile >> 'org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec:2.0.0' >> - compile 'org.apache.geronimo.specs:geronimo-jaxr_1.0_spec:1.0' >> - compile 'org.apache.geronimo.specs:geronimo-jaxrpc_1.1_spec:1.1' >> - compile 'org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1' >> - compile 'org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1' >> - compile 'org.apache.geronimo.specs:geronimo-saaj_1.3_spec:1.1' >> - compile 'org.apache.httpcomponents:httpclient-cache:4.4.1' >> - compile 'org.apache.httpcomponents:httpcore:4.4.1' >> - compile 'org.apache.logging.log4j:log4j-1.2-api:2.3' >> - compile 'org.apache.logging.log4j:log4j-api:2.3' >> - compile 'org.apache.logging.log4j:log4j-core:2.3' >> - compile 'org.apache.logging.log4j:log4j-nosql:2.3' >> - compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.3' >> - compile 'org.apache.neethi:neethi:3.0.3' >> - compile 'org.apache.pdfbox:fontbox:1.8.11' >> - compile 'org.apache.pdfbox:jempbox:1.8.11' >> - compile 'org.apache.pdfbox:pdfbox:1.8.12' >> - compile 'org.apache.poi:poi:3.14' >> - compile >> 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.xpp3:1.1.4c_7' >> - compile 'org.apache.shiro:shiro-core:1.2.5' >> - compile 'org.apache.tika:tika-core:1.12' >> - compile 'org.apache.tika:tika-parsers:1.12' >> - compile 'org.apache.tomcat:tomcat-annotations-api:7.0.54' >> - compile 'org.apache.tomcat:tomcat-api:8.0.33' >> - compile 'org.apache.tomcat:tomcat-catalina-ha:8.0.33' >> - compile 'org.apache.tomcat:tomcat-catalina:8.0.33' >> - compile 'org.apache.tomcat:tomcat-coyote:8.0.33' >> - compile 'org.apache.tomcat:tomcat-jasper:8.0.33' >> - compile 'org.apache.tomcat:tomcat-jni:8.0.33' >> - compile 'org.apache.tomcat:tomcat-tribes:8.0.33' >> - compile 'org.apache.tomcat:tomcat-util-scan:8.0.33' >> - compile 'org.apache.tomcat:tomcat-util:8.0.33' >> - compile 'org.apache.tomcat.embed:tomcat-embed-websocket:8.0.33' >> - compile 'org.apache.tomcat.extras:tomcat-extras-juli-adapters:8.0.33' >> - compile 'org.apache.tomcat.extras:tomcat-extras-juli:8.0.33' >> - compile 'org.apache.woden:woden-core:1.0M10' >> - compile 'org.apache.ws.commons.axiom:axiom-api:1.2.17' >> - compile 'org.apache.ws.commons.axiom:axiom-impl:1.2.17' >> - compile 'org.apache.ws.commons.util:ws-commons-util:1.0.2' >> - compile 'org.apache.ws.xmlschema:xmlschema-core:2.2.1' >> - compile >> 'org.apache.xalan:com.springsource.org.apache.xml.serializer:2.7.1' >> - compile 'org.apache.xmlgraphics:fop:2.1' >> - compile 'org.apache.xmlgraphics:xmlgraphics-commons:2.1' >> - compile 'org.apache.xmlrpc:xmlrpc-client:3.1.2' >> - compile 'org.apache.xmlrpc:xmlrpc-common:3.1.2' >> - compile 'org.apache.xmlrpc:xmlrpc-server:3.1.2' >> - compile >> 'org.codeartisans.thirdparties.swing:batik-all:1.8pre-r1084380' >> - compile 'org.codehaus.groovy:groovy-all:2.4.5' >> - compile 'org.dom4j:com.springsource.org.dom4j:1.6.1' >> - compile 'org.eclipse.jdt.core.compiler:ecj:4.5' >> - compile 'org.freemarker:freemarker:2.3.24-incubating' >> - compile 'org.hamcrest:hamcrest-all:1.3' >> - compile 'org.jdom:jdom:1.1' >> - compile 'org.lucee:commons-lang:2.6.0' >> - compile 'org.owasp.esapi:esapi:2.1.0' >> - compile 'org.slf4j:slf4j-api:1.6.4' >> - compile 'org.springframework:spring-core:4.2.3.RELEASE' >> - compile 'org.springframework:spring-test:4.2.3.RELEASE' >> - compile 'org.zapodot:jackson-databind-java-optional:2.4.2' >> - compile 'oro:oro:2.0.8' >> - compile 'ws-commons-java5:ws-commons-java5:1.0.1' >> - compile 'wsdl4j:wsdl4j:1.6.2' >> - compile 'xalan:xalan:2.7.2' >> - compile 'xml-apis:xml-apis-ext:1.3.04' >> - compile 'xml-apis:xml-apis:1.4.01' >> - compile 'mysql:mysql-connector-java:5.1.36' >> - compile 'postgresql:postgresql:9.0-801.jdbc4' >> - >> - >> - // plugin libs >> - subprojects.each { subProject -> >> - compile project(path: subProject.path, configuration: >> 'pluginLibsCompile') >> - runtime project(path: subProject.path, configuration: >> 'pluginLibsRuntime') >> - } >> - >> - // libs needed for junitreport >> - junitLibs 'junit:junit:4.12' >> - junitLibs 'org.apache.ant:ant-junit:1.9.7' >> - junitLibs 'org.apache.ant:ant-junit4:1.9.7' >> - >> - // local libs >> - getDirectoryInActiveComponentsIfExists('lib').each { libDir -> >> - compile fileTree(dir: libDir, include: '**/*.jar') >> - } >> - runtime files("${rootDir}/build/libs/ofbiz-base-test.jar") >> -} >> - >> -def excludedJavaSources = [] >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealEvents.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealPaymentServiceTest.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/orbital/OrbitalPaymentServices.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/paypal/PayPalServices.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayPaymentServices.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayServiceTest.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/verisign/PayflowPro.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayInputStream.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayOutputStream.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeServices.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeWorker.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/content/report/JREntityListIteratorDataSource.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/content/report/JRMapCollectionDataSource.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareException.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareServices.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareUTL.java' >> -excludedJavaSources.add 'ShipmentScaleApplet.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/securityext/thirdparty/truition/TruitionCoReg.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsJXlsViewHandler.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsPdfViewHandler.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsPoiXlsViewHandler.java' >> -excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsXmlViewHandler.java' >> - >> -sourceSets { >> - main { >> - java { >> - srcDirs = >> getDirectoryInActiveComponentsIfExists('src/main/java') >> - exclude excludedJavaSources >> - } >> - resources { >> - srcDirs = >> getDirectoryInActiveComponentsIfExists('src/main/java') >> - srcDirs += getDirectoryInActiveComponentsIfExists('config') >> - exclude excludedJavaSources >> - } >> - } >> - >> - test { >> - java { >> - srcDirs = >> getDirectoryInActiveComponentsIfExists('src/test/java') >> - } >> - resources { >> - srcDirs = >> getDirectoryInActiveComponentsIfExists('src/test/java') >> - } >> - } >> -} >> - >> -jar { >> - manifest { >> - attributes( >> - "Implementation-Title": project.name, >> - "Main-Class": ofbizMainClass, >> - "Class-Path": getJarManifestClasspathForCurrentOs() >> - ) >> - } >> -} >> - >> -// Eclipse plugin settings >> -eclipse.classpath.file.whenMerged { classpath -> >> - /* The code inside this block removes unnecessary entries >> - * in the .classpath file which are generated automatically >> - * due to the settings in the sourceSets block >> - */ >> - def osName = System.getProperty('os.name').toLowerCase() >> - def osDirSeparator = osName.contains('windows') ? '\\' : '/' >> - >> - iterateOverActiveComponents { component -> >> - def componentName = component.toString() - rootDir.toString() >> - classpath.entries.removeAll { entry -> >> - // remove any "src" entries in .classpath of the form >> /componentName >> - entry.kind == 'src' && >> - entry.path ==~ '.*/+(' + >> componentName.tokenize(osDirSeparator).last() + ')$' >> - } >> - } >> - classpath.entries.removeAll { entry -> >> - /* remove "src" entries in .classpath named: >> - * /framework, /applications, /specialpurpose and /hot-deploy >> - */ >> - entry.kind == 'src' && >> - entry.path ==~ /(\/+framework)$/ || >> - entry.path ==~ /(\/+applications)$/ || >> - entry.path ==~ /(\/+specialpurpose)$/ || >> - entry.path ==~ /(\/+hot-deploy)$/ >> - } >> - getDirectoryInActiveComponentsIfExists('config').each { configDir -> >> - /* remove any "src" entries in .classpath of the form >> componentName/config >> - * >> - * windows format: \framework\base\config >> - * Unix format: /framework/base/config >> - * .classpath format: framework/base/config >> - * >> - * Must convert both windows and unix to .classpath format to >> - * be able to remove it from the file >> - */ >> - def relativeDir = configDir.toString() - rootDir.toString() - >> osDirSeparator >> - def eclipseConfigSrc = osName.contains('windows') ? >> relativeDir.replaceAll("\\\\", "/") : relativeDir >> - classpath.entries.removeAll { entry -> >> - entry.kind == 'src' && >> - entry.path == eclipseConfigSrc >> - } >> - } >> -} >> -tasks.eclipse.dependsOn(cleanEclipse) >> - >> -/* ======================================================== >> - * Tasks >> - * ======================================================== */ >> - >> -// ========== Task group labels ========== >> -def cleanupGroup = 'Cleaning' >> -def ofbizServer = 'OFBiz Server' >> -def sysadminGroup = 'System Administration' >> -def committerGroup = 'OFBiz committers' >> - >> -// ========== OFBiz Server tasks ========== >> - >> -task loadDefault(group: ofbizServer) { >> - dependsOn 'ofbiz --load-data' >> - description 'Load default data; meant for OFBiz development, testing, >> and demo purposes' >> -} >> - >> -task testIntegration(group: ofbizServer) { >> - dependsOn 'ofbiz --test' >> - description 'Run OFBiz integration tests; You must run loadDefault >> before running this task' >> -} >> - >> -task terminateOfbiz(group: ofbizServer, >> - description: 'Force termination of any running OFBiz servers, only >> use if \"--shutdown\" command fails') << { >> - def os = System.getProperty("os.name").toLowerCase() >> - if (os.contains("windows")) { >> - Runtime.getRuntime().exec("wmic process where \"CommandLine Like >> \'%org.apache.ofbiz.base.start.Start%\'\" Call Terminate") >> - } else { >> - def processOutput = new ByteArrayOutputStream() >> - exec { >> - commandLine 'ps', 'ax' >> - standardOutput = processOutput >> - } >> - processOutput.toString().split(System.lineSeparator()).each { >> line -> >> - if(line ==~ /.*org\.apache\.ofbiz\.base\.start\.Start.*/) { >> - exec { commandLine 'kill', '-9', line.tokenize().first() } >> - } >> - } >> - } >> -} >> - >> -task loadAdminUserLogin(group: ofbizServer) { >> - description 'Create admin user with temporary password equal to >> ofbiz. You must provide userLoginId' >> - createOfbizCommandTask('executeLoadAdminUser', >> - ['--load-data', 'file=/runtime/tmp/AdminUserLoginData.xml'], >> - jvmArguments, false) >> - executeLoadAdminUser.doFirst { >> - copy { >> - from >> ("${rootDir}/framework/resources/templates/AdminUserLoginData.xml") { >> - filter(ReplaceTokens, tokens: [userLoginId: userLoginId]) >> - } >> - into "${rootDir}/runtime/tmp/" >> - } >> - } >> - dependsOn executeLoadAdminUser >> - doLast { >> - delete("${rootDir}/runtime/tmp/AdminUserLoginData.xml") >> - } >> -} >> - >> -task loadTenant(group: ofbizServer, description: 'Load data using >> tenantId') { >> - >> - createOfbizCommandTask('executeLoadTenant', [], jvmArguments, false) >> - >> - if(project.hasProperty('tenantId')) { >> - executeLoadTenant.args '--load-data' >> - executeLoadTenant.args "delegator=default#${tenantId}" >> - } >> - if(project.hasProperty('tenantReaders')) { >> - executeLoadTenant.args '--load-data' >> - executeLoadTenant.args "readers=${tenantReaders}" >> - } >> - if(project.hasProperty('tenantComponent')) { >> - executeLoadTenant.args '--load-data' >> - executeLoadTenant.args "component=${tenantComponent}" >> - } >> - >> - doLast { >> - if(!project.hasProperty('tenantId')) { >> - throw new GradleException('Missing project property tenantId') >> - } >> - } >> - dependsOn executeLoadTenant >> -} >> - >> -task createTenant(group: ofbizServer, description: 'Create a new tenant >> in your environment') { >> - >> - def databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" >> - >> - task prepareAndValidateTenantArguments << { >> - if(!project.hasProperty('tenantId')) { >> - throw new GradleException('Project property tenantId is >> missing') >> - } >> - if(!project.hasProperty('tenantName')) { >> - throw new GradleException('Project property tenantName is >> missing') >> - } >> - // dbPlatform values: D(Derby), M(MySQL), O(Oracle), >> P(PostgreSQL) (default D) >> - if(project.hasProperty('dbPlatform')) { >> - if(dbPlatform == 'D') { >> - databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" >> - } else if(dbPlatform == 'M') { >> - databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-MySQL.xml" >> - } else if(dbPlatform == 'O') { >> - databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-Oracle.xml" >> - } else if(dbPlatform == 'P') { >> - databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml" >> - } else { >> - throw new GradleException('Invalid value for property >> dbPlatform: ' + "${dbPlatform}") >> - } >> - } >> - } >> - >> - task generateDatabaseTemplateFile(dependsOn: >> prepareAndValidateTenantArguments) << { >> - def filterTokens = ['tenantId': tenantId, >> - 'tenantName': tenantName, >> - 'domainName': project.hasProperty('domainName')? >> "${domainName}":'org.apache.ofbiz', >> - 'db-IP': project.hasProperty('dbIp')? "${dbIp}":'', >> - 'db-User': project.hasProperty('dbUser')? "${dbUser}":'', >> - 'db-Password': project.hasProperty('dbPassword')? >> "${dbPassword}":''] >> - >> - generateFileFromTemplate(databaseTemplateFile, 'runtime/tmp', >> - filterTokens, 'tmpFilteredTenantData.xml') >> - } >> - >> - task generateAdminUserTemplateFile(dependsOn: >> prepareAndValidateTenantArguments) << { >> - generateFileFromTemplate( >> - >> "${rootDir}/framework/resources/templates/AdminUserLoginData.xml", >> - 'runtime/tmp', >> - ['userLoginId': "${tenantId}-admin".toString()], >> - 'tmpFilteredUserLogin.xml') >> - } >> - >> - // Load the tenants master database >> - createOfbizCommandTask('loadTenantOnDefaultDelegator', >> - ['--load-data', 'file=/runtime/tmp/tmpFilteredTenantData.xml'], >> - jvmArguments, false) >> - loadTenantOnDefaultDelegator.dependsOn(generateDatabaseTemplateFile, >> generateAdminUserTemplateFile) >> - >> - // Load the actual tenant data >> - createOfbizCommandTask('loadTenantData', [], jvmArguments, false) >> - loadTenantData.dependsOn(loadTenantOnDefaultDelegator) >> - >> - // Load the tenant admin user account >> - createOfbizCommandTask('loadTenantAdminUserLogin', [], jvmArguments, >> false) >> - loadTenantAdminUserLogin.dependsOn(loadTenantData) >> - >> - /* pass arguments to tasks, must be done this way >> - * because we are in the configuration phase. We cannot >> - * set the parameters at the execution phase. */ >> - if(project.hasProperty('tenantId')) { >> - loadTenantData.args '--load-data' >> - loadTenantData.args "delegator=default#${tenantId}" >> - >> - loadTenantAdminUserLogin.args '--load-data' >> - loadTenantAdminUserLogin.args "delegator=default#${tenantId}" >> - loadTenantAdminUserLogin.args '--load-data' >> - loadTenantAdminUserLogin.args >> "file=${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml" >> - } >> - if(project.hasProperty('tenantReaders')) { >> - loadTenantData.args '--load-data' >> - loadTenantData.args "readers=${tenantReaders}" >> - } >> - >> - dependsOn(loadTenantAdminUserLogin) >> - >> - // cleanup >> - doLast { >> - delete("${rootDir}/runtime/tmp/tmpFilteredTenantData.xml") >> - delete("${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml") >> - } >> -} >> - >> -// ========== System Administration tasks ========== >> -task createComponent(group: sysadminGroup, description: 'Create the >> layout of an OFBiz component in the hot-deploy folder.') << { >> - >> - def filterTokens = ['component-name': componentName, >> - 'component-resource-name': componentResourceName, >> - 'webapp-name': webappName, >> - 'base-permission': basePermission] >> - def templateDir = "${rootDir}/framework/resources/templates" >> - def componentDir = "${rootDir}/hot-deploy/${componentName}" >> - >> - logger.info('Creating a component with the following properties: ') >> - logger.info(" - componentName: ${componentName}") >> - logger.info(" - componentResourceName: ${componentResourceName}") >> - logger.info(" - webappName: ${webappName}") >> - logger.info(" - basePermission: ${basePermission}") >> - >> - mkdir componentDir >> - mkdir componentDir+"/config" >> - mkdir componentDir+"/data" >> - mkdir componentDir+"/data/helpdata" >> - mkdir componentDir+"/dtd" >> - mkdir componentDir+"/documents" >> - mkdir componentDir+"/entitydef" >> - mkdir componentDir+"/lib" >> - mkdir componentDir+"/patches" >> - mkdir componentDir+"/patches/test" >> - mkdir componentDir+"/patches/qa" >> - mkdir componentDir+"/patches/production" >> - mkdir componentDir+"/script" >> - mkdir componentDir+"/servicedef" >> - mkdir componentDir+"/src" >> - mkdir componentDir+"/testdef" >> - mkdir componentDir+"/webapp" >> - mkdir componentDir+"/webapp/${webappName}" >> - mkdir componentDir+"/webapp/${webappName}/error" >> - mkdir componentDir+"/webapp/${webappName}/WEB-INF" >> - mkdir componentDir+"/webapp/${webappName}/WEB-INF/actions" >> - mkdir componentDir+"/widget/" >> - >> - generateFileFromTemplate(templateDir+"/ofbiz-component.xml", >> componentDir, >> - filterTokens, "ofbiz-component.xml") >> - generateFileFromTemplate(templateDir+"/TypeData.xml", >> componentDir+"/data", >> - filterTokens, "${componentResourceName}TypeData.xml") >> - >> generateFileFromTemplate(templateDir+"/SecurityPermissionSeedData.xml", >> componentDir+"/data", >> - filterTokens, >> "${componentResourceName}SecurityPermissionSeedData.xml") >> - generateFileFromTemplate(templateDir+"/SecurityGroupDemoData.xml", >> componentDir+"/data", >> - filterTokens, "${componentResourceName}SecurityGroupDemoData.xml") >> - generateFileFromTemplate(templateDir+"/DemoData.xml", >> componentDir+"/data", >> - filterTokens, "${componentResourceName}DemoData.xml") >> - generateFileFromTemplate(templateDir+"/HELP.xml", >> componentDir+"/data/helpdata", >> - filterTokens, "HELP_${componentResourceName}.xml") >> - generateFileFromTemplate(templateDir+"/document.xml", >> componentDir+"/documents", >> - filterTokens, "${componentResourceName}.xml") >> - generateFileFromTemplate(templateDir+"/entitymodel.xml", >> componentDir+"/entitydef", >> - filterTokens, "entitymodel.xml") >> - generateFileFromTemplate(templateDir+"/services.xml", >> componentDir+"/servicedef", >> - filterTokens, "services.xml") >> - generateFileFromTemplate(templateDir+"/Tests.xml", >> componentDir+"/testdef", >> - filterTokens, "${componentResourceName}Tests.xml") >> - generateFileFromTemplate(templateDir+"/UiLabels.xml", >> componentDir+"/config", >> - filterTokens, "${componentResourceName}UiLabels.xml") >> - generateFileFromTemplate(templateDir+"/index.jsp", >> componentDir+"/webapp/${webappName}", >> - filterTokens, "index.jsp") >> - generateFileFromTemplate(templateDir+"/error.jsp", >> componentDir+"/webapp/${webappName}/error", >> - filterTokens, "error.jsp") >> - generateFileFromTemplate(templateDir+"/controller.xml", >> componentDir+"/webapp/${webappName}/WEB-INF", >> - filterTokens, "controller.xml") >> - generateFileFromTemplate(templateDir+"/web.xml", >> componentDir+"/webapp/${webappName}/WEB-INF", >> - filterTokens, "web.xml") >> - generateFileFromTemplate(templateDir+"/CommonScreens.xml", >> componentDir+"/widget", >> - filterTokens, "CommonScreens.xml") >> - generateFileFromTemplate(templateDir+"/Screens.xml", >> componentDir+"/widget", >> - filterTokens, "${componentResourceName}Screens.xml") >> - generateFileFromTemplate(templateDir+"/Menus.xml", >> componentDir+"/widget", >> - filterTokens, "${componentResourceName}Menus.xml") >> - generateFileFromTemplate(templateDir+"/Forms.xml", >> componentDir+"/widget", >> - filterTokens, "${componentResourceName}Forms.xml") >> - >> - logger.info("Component successfully created in folder >> ${rootDir}/hot-deploy/${componentName}.") >> - logger.info("Restart OFBiz and then visit the URL: >> https://localhost:8443/${webappName}") >> -} >> - >> -task createTestReports(group: sysadminGroup, description: 'Generate HTML >> reports from junit XML output') << { >> - ant.taskdef(name: 'junitreport', >> - classname: >> 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator', >> - classpath: configurations.junitLibs.asPath) >> - ant.junitreport(todir: './runtime/logs/test-results') { >> - fileset(dir: './runtime/logs/test-results') { >> - include(name: '*.xml') >> - } >> - report(format:'frames', todir:'./runtime/logs/test-results/html') >> - } >> -} >> -/* >> - * TODO replace this code with something more declarative. >> - * We are using it so that if tests fail we still get HTML reports >> - */ >> -gradle.taskGraph.afterTask { Task task, TaskState state -> >> - if (task.name ==~ /^ofbiz.*--test.*/ >> - || task.name ==~ /^ofbiz.*-t.*/) { >> - tasks.createTestReports.execute() >> - } >> -} >> - >> -// ========== Clean up tasks ========== >> -task cleanCatalina(group: cleanupGroup, description: 'Clean Catalina data >> in runtime/catalina/work') << { >> - delete "${rootDir}/runtime/catalina/work" >> -} >> -task cleanData(group: cleanupGroup, description: 'Clean all DB data >> (Derby) under runtime/data') << { >> - deleteAllInDirWithExclusions("${rootDir}/runtime/data/", ['README', >> 'derby.properties']) >> -} >> -task cleanDownloads(group: cleanupGroup, description: 'Clean all >> downloaded files') << { >> - delete fileTree(dir: "${rootDir}/framework/base/lib", includes: >> ['activemq-*.jar']) >> - delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", >> includes: ['postgresql-*.jar']) >> - delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", >> includes: ['mysql-*.jar']) >> -} >> -task cleanLogs(group: cleanupGroup, description: 'Clean all logs in >> runtime/logs') << { >> - deleteAllInDirWithExclusions("${rootDir}/runtime/logs/", ['README']) >> -} >> -task cleanOutput(group: cleanupGroup, description: 'Clean runtime/output >> directory') << { >> - deleteAllInDirWithExclusions("${rootDir}/runtime/output/", ['README']) >> -} >> -task cleanIndexes(group: cleanupGroup, description: 'Remove search >> indexes (e.g. Lucene) from runtime/indexes') << { >> - deleteAllInDirWithExclusions("${rootDir}/runtime/indexes/", >> ['README', 'index.properties']) >> -} >> -task cleanTempfiles(group: cleanupGroup, description: 'Remove file in >> runtime/tempfiles') << { >> - deleteAllInDirWithExclusions("${rootDir}/runtime/tempfiles/", >> ['README']) >> - deleteAllInDirWithExclusions("${rootDir}/runtime/tmp/", ['README']) >> -} >> -task cleanUploads(group: cleanupGroup, description: 'Remove uploaded >> files.') << { >> - deleteAllInDirWithExclusions("${rootDir}/runtime/uploads/", []) >> -} >> -task cleanXtra(group: cleanupGroup, description: 'Clean extra generated >> files like .rej, .DS_Store, etc.') << { >> - delete fileTree(dir: "${rootDir}", includes: ['**/.nbattrs', >> '**/*~','**/.#*', '**/.DS_Store', '**/*.rej', '**/*.orig']) >> -} >> -task cleanGradle(group: cleanupGroup, description: 'clean generated files >> from gradle') << { >> - delete file("${rootDir}/.gradle") >> -} >> - >> -def cleanTasks = getTasksMatchingRegex(/^clean.+/) >> -task cleanAll(group: cleanupGroup, dependsOn: [cleanTasks, clean]) { >> - description 'Execute all cleaning tasks.' >> -} >> - >> -// ========== Tasks for OFBiz committers ========== >> -def websiteDir = "${rootDir}/../site" >> -task copyDtds(group: committerGroup, description: 'Copy all DTDs from >> OFBiz instance to website') << { >> - mkdir websiteDir+'/dtds' >> - copy { >> - from(fileTree("${rootDir}").files) { >> - include '**/*.xsd' >> - exclude '**/002*.xsd' >> - exclude '**/068*.xsd' >> - exclude '**/161*.xsd' >> - exclude '**/196*.xsd' >> - exclude '**/197*.xsd' >> - } >> - into websiteDir+'/dtds' >> - } >> -} >> - >> -task gitInfoFooter(group: committerGroup, description: 'Update the Git >> Branch-revision info in the footer') << { >> - def branch >> - def revision >> - def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' >> - File gitFooterFile = new File("${rootDir}/runtime/GitInfo.ftl") >> - >> - def branchOutput = new ByteArrayOutputStream() >> - exec{ >> - commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD' >> - standardOutput = branchOutput >> - } >> - branch = branchOutput.toString() >> - def revisionOutput = new ByteArrayOutputStream() >> - exec{ >> - commandLine 'git', 'rev-parse', 'HEAD' >> - standardOutput = revisionOutput >> - } >> - revision = revisionOutput.toString() >> - gitFooterFile.delete() >> - gitFooterFile.createNewFile() >> - gitFooterFile << "Branch: ${branch}" >> - gitFooterFile << "Revision: ${revision}" >> - gitFooterFile << "Built on: ${timestamp}" + System.lineSeparator() >> - gitFooterFile << "Java Version: >> ${org.gradle.internal.jvm.Jvm.current()}" >> -} >> - >> -task svnInfoFooter(group: committerGroup, description: 'Update the >> Subversion revision info in the footer') << { >> - def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' >> - File svnFooterFile = new File("${rootDir}/runtime/SvnInfo.ftl") >> - def svnOutput = new ByteArrayOutputStream() >> - exec{ >> - commandLine 'svn', 'info', '--xml' >> - standardOutput = svnOutput >> - } >> - def info = new XmlParser().parseText(svnOutput.toString()) >> - svnFooterFile.delete() >> - svnFooterFile.createNewFile() >> - svnFooterFile << "Branch: ${info.entry.url.text()}" + >> System.lineSeparator() >> - svnFooterFile << "Revision: ${info.entry.commit.@revision}" + >> System.lineSeparator() >> - svnFooterFile << "Built on: ${timestamp}" + System.lineSeparator() >> - svnFooterFile << "Java Version: >> ${org.gradle.internal.jvm.Jvm.current()}" >> -} >> - >> -// ========== hidden support tasks ========== >> - >> -/* without executing this task, a test would fail that is named >> - * >> org.apache.ofbiz.base.util.test.UtilObjectTests.testGetObjectFromFactory() >> - * >> - * The test fails because it requires defining a service provider, read >> more below. >> - * >> http://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider >> - */ >> -task createBaseTestServiceProviderJar << { >> - ant.jar(destfile: "${rootDir}/build/libs/ofbiz-base-test.jar") { >> - service(type: >> 'org.apache.ofbiz.base.util.test.UtilObjectTests$TestFactoryIntf') { >> - provider(classname: >> 'org.apache.ofbiz.base.util.test.UtilObjectTests$FirstTestFactory') >> - provider(classname: >> 'org.apache.ofbiz.base.util.test.UtilObjectTests$SecondTestFactory') >> - } >> - } >> -} >> -classes.dependsOn createBaseTestServiceProviderJar >> - >> -/* ======================================================== >> - * Rules-based OFBiz server commands >> - * ======================================================== */ >> - >> -tasks.addRule('Pattern: ofbiz <Commands>: Execute OFBiz startup >> commands') { String taskName -> >> - if(taskName ==~ /^ofbiz\s.*/ || taskName == 'ofbiz') { >> - def arguments = (taskName - 'ofbiz').toLowerCase().tokenize(' ') >> - createOfbizCommandTask(taskName, arguments, jvmArguments, false) >> - } >> -} >> - >> -tasks.addRule('Pattern: ofbizDebug <Commands>: Execute OFBiz startup >> commands in remote debug mode') { String taskName -> >> - if(taskName ==~ /^ofbizDebug\s.*/ || taskName == 'ofbizDebug') { >> - def arguments = (taskName - >> 'ofbizDebug').toLowerCase().tokenize(' ') >> - createOfbizCommandTask(taskName, arguments, jvmArguments, true) >> - } >> -} >> - >> -tasks.addRule('Pattern: ofbizSecure <Commands>: Execute OFBiz startup >> commands pre-loading the notsoserial Java agent') { String taskName -> >> - if(taskName ==~ /^ofbizSecure\s.*/ || taskName == 'ofbizSecure') { >> - def arguments = (taskName - >> 'ofbizSecure').toLowerCase().tokenize(' ') >> - jvmArguments.add('-server') >> - >> jvmArguments.add("-javaagent:${rootDir}/tools/security/notsoserial/notsoserial-1.0-SNAPSHOT.jar") >> - >> jvmArguments.add("-Dnotsoserial.whitelist=${rootDir}/tools/security/notsoserial/empty.txt") >> - >> jvmArguments.add("-Dnotsoserial.dryrun=${rootDir}/tools/security/notsoserial/is-deserialized.txt") >> - >> jvmArguments.add("-Dnotsoserial.trace=${rootDir}/tools/security/notsoserial/deserialize-trace.txt") >> - createOfbizCommandTask(taskName, arguments, jvmArguments, false) >> - } >> -} >> - >> -tasks.addRule('Pattern: ofbizBackground <Commands>: Execute OFBiz startup >> commands in background and output to console.log') { String taskName -> >> - if(taskName ==~ /^ofbizBackground\s.*/ || taskName == >> 'ofbizBackground') { >> - createOfbizBackgroundCommandTask(taskName) >> - } >> -} >> - >> -tasks.addRule('Pattern: ofbizBackgroundSecure <Commands>: Execute OFBiz >> startup commands in background (secure mode) and output to console.log') { >> String taskName -> >> - if(taskName ==~ /^ofbizBackgroundSecure\s.*/ || taskName == >> 'ofbizBackgroundSecure') { >> - createOfbizBackgroundCommandTask(taskName) >> - } >> -} >> - >> -/* ======================================================== >> - * Helper Functions >> - * ======================================================== */ >> - >> -def createOfbizCommandTask(taskName, arguments, jvmArguments, >> isDebugMode) { >> - >> - def ofbizJarName = buildDir.toString()+'/libs/'+project.name+'.jar' >> - >> - task(type: JavaExec, dependsOn: build, taskName) { >> - jvmArgs(jvmArguments) >> - debug = isDebugMode >> - classpath = files(ofbizJarName) >> - main = ofbizMainClass >> - arguments.each { argument -> >> - args argument >> - } >> - } >> -} >> - >> -def createOfbizBackgroundCommandTask(taskName) { >> - def os = System.getProperty("os.name").toLowerCase() >> - def sourceTask = taskName.tokenize().first() >> - def arguments = (taskName - sourceTask) >> - >> - def targetTask >> - def gradleRunner >> - >> - if(sourceTask == 'ofbizBackground') { >> - targetTask = 'ofbiz' >> - } else if(sourceTask == 'ofbizBackgroundSecure') { >> - targetTask = 'ofbizSecure' >> - } >> - >> - if (os.contains("windows")) { >> - gradleRunner = 'gradlew' >> - } else { >> - gradleRunner = './gradlew' >> - } >> - >> - task (taskName) { >> - doLast { >> - spawnProcess(gradleRunner, "${targetTask} ${arguments}") >> - } >> - } >> -} >> - >> -def spawnProcess(command, arguments) { >> - ProcessBuilder pb = new ProcessBuilder(command, arguments) >> - File consoleLog = file("${rootDir}/runtime/logs/console.log"); >> - >> - pb.directory(file("${rootDir}")) >> - pb.redirectErrorStream(true) >> - pb.redirectOutput(ProcessBuilder.Redirect.appendTo(consoleLog)) >> - pb.start() >> -} >> - >> -def getDirectoryInActiveComponentsIfExists(String dirName) { >> - def dirInComponents = [] >> - iterateOverActiveComponents { component -> >> - def subDir = file(component.toString() + '/' + dirName) >> - if(subDir.exists()) { >> - dirInComponents.add subDir >> - } >> - } >> - return dirInComponents >> -} >> - >> -def deleteAllInDirWithExclusions(dirName, exclusions) { >> - ant.delete (includeEmptyDirs: 'true', verbose: 'on') { >> - fileset(dir: dirName, includes: '**/*', erroronmissingdir: >> "false") { >> - exclusions.each { exclusion -> >> - exclude name: exclusion >> - } >> - } >> - } >> -} >> - >> -def getTasksMatchingRegex(theRegex) { >> - def filteredTasks = [] >> - tasks.each { task -> >> - if(task.name ==~ theRegex) { >> - filteredTasks.add(task) >> - } >> - } >> - return filteredTasks >> -} >> - >> -def generateFileFromTemplate(templateFileInFullPath, targetDirectory, >> filterTokens, newFileName) { >> - copy { >> - from (templateFileInFullPath) { >> - filter ReplaceTokens, tokens: filterTokens >> - rename templateFileInFullPath.tokenize('/').last(), >> newFileName >> - } >> - into targetDirectory >> - } >> -} >> - >> -def getJarManifestClasspathForCurrentOs() { >> - def osClassPath = '' >> - if(System.getProperty('os.name').toLowerCase().contains('windows')) { >> - configurations.runtime.files.each { cpEntry -> >> - osClassPath += '\\' + cpEntry.toString() + ' ' >> - } >> - } else { >> - osClassPath = configurations.runtime.files.collect { "$it" >> }.join(' ') >> - } >> - return osClassPath >> -} >> +/* >> + * Licensed to the Apache Software Foundation (ASF) under one >> + * or more contributor license agreements. See the NOTICE file >> + * distributed with this work for additional information >> + * regarding copyright ownership. The ASF licenses this file >> + * to you under the Apache License, Version 2.0 (the >> + * "License"); you may not use this file except in compliance >> + * with the License. You may obtain a copy of the License at >> + * >> + * http://www.apache.org/licenses/LICENSE-2.0 >> + * >> + * Unless required by applicable law or agreed to in writing, >> + * software distributed under the License is distributed on an >> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY >> + * KIND, either express or implied. See the License for the >> + * specific language governing permissions and limitations >> + * under the License. >> + */ >> +import org.apache.tools.ant.filters.ReplaceTokens >> + >> +/* ======================================================== >> + * Project setup >> + * ======================================================== */ >> + >> +apply plugin: 'java' >> +apply plugin: 'eclipse' >> + >> +apply from: 'common.gradle' >> + >> +// java settings >> +def jvmArguments = ['-Xms128M', '-Xmx512M'] >> +ext.ofbizMainClass = 'org.apache.ofbiz.base.start.Start' >> +javadoc.failOnError = false >> +sourceCompatibility = '1.8' >> +targetCompatibility = '1.8' >> + >> +// root and subproject settings >> +defaultTasks 'build' >> + >> +allprojects { >> + repositories{ >> + jcenter() >> + } >> +} >> + >> +subprojects { >> + configurations { >> + // compile-time plugin libraries >> + pluginLibsCompile >> + // runtime plugin libraries >> + pluginLibsRuntime >> + } >> +} >> + >> +configurations { >> + junitLibs >> +} >> + >> +dependencies { >> + // general framework libs >> + compile 'apache-xerces:resolver:2.9.1' >> + compile 'apache-xerces:xercesImpl:2.9.1' >> + compile 'avalon-framework:avalon-framework-impl:4.2.0' >> + compile 'bouncycastle:bouncycastle-jce-jdk13:112' >> + compile 'com.fasterxml.jackson.core:jackson-annotations:2.4.0' >> + compile 'com.fasterxml.jackson.core:jackson-core:2.4.2' >> + compile 'com.google.guava:guava:19.0' >> + compile 'com.google.zxing:core:3.2.1' >> + compile >> 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:1.0' >> + compile >> 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:20160628.1' >> + compile 'com.ibm.icu:icu4j:57.1' >> + compile 'com.lowagie:itext:2.1.7' >> + compile 'com.sun.mail:javax.mail:1.5.1' >> + compile >> 'com.sun.syndication:com.springsource.com.sun.syndication:0.9.0' >> + compile 'com.thoughtworks.xstream:xstream:1.4.9' >> + compile 'commons-beanutils:commons-beanutils-core:1.8.3' >> + compile 'commons-cli:commons-cli:1.3.1' >> + compile 'commons-codec:commons-codec:1.10' >> + compile 'commons-el:commons-el:1.0' >> + compile 'commons-fileupload:commons-fileupload:1.3.1' >> + compile 'commons-io:commons-io:2.4' >> + compile 'commons-logging:commons-logging:1.2' >> + compile 'commons-net:commons-net:3.3' >> + compile 'commons-validator:commons-validator:1.5.1' >> + compile 'de.odysseus.juel:juel-impl:2.2.7' >> + compile 'de.odysseus.juel:juel-spi:2.2.7' >> + compile 'httpunit:httpunit:1.7' >> + compile 'javax.el:javax.el-api:3.0.1-b04' >> + compile 'javax.servlet:javax.servlet-api:3.1.0' >> + compile 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.0' >> + compile 'javolution:javolution:5.4.3' >> + compile 'junit:junit-dep:4.10' >> + compile 'jython:jython:2.1' >> + compile 'net.fortuna.ical4j:ical4j:1.0-rc3-atlassian-11' >> + compile 'net.sf.barcode4j:barcode4j-fop-ext-complete:2.0' >> + compile 'net.sf.dozer:dozer:4.2.1' >> + compile 'net.sf.ezmorph:ezmorph:0.9.1' >> + compile 'net.sourceforge.nekohtml:nekohtml:1.9.16' >> + compile 'org.apache.ant:ant-apache-bsf:1.9.0' >> + compile 'org.apache.ant:ant-junit:1.9.0' >> + compile 'org.apache.ant:ant-launcher:1.9.0' >> + compile 'org.apache.axis2:axis2-adb:1.7.1' >> + compile 'org.apache.axis2:axis2-kernel:1.7.1' >> + compile 'org.apache.axis2:axis2-transport-http:1.7.1' >> + compile 'org.apache.axis2:axis2-transport-local:1.7.1' >> + compile 'org.apache.bsf:com.springsource.org.apache.bsf:2.4.0' >> + compile 'org.apache.commons:commons-collections4:4.1' >> + compile 'org.apache.commons:commons-compress:1.11' >> + compile 'org.apache.commons:commons-csv:1.1' >> + compile 'org.apache.commons:commons-dbcp2:2.1' >> + compile 'org.apache.commons:commons-pool2:2.3' >> + compile 'org.apache.derby:derby:10.11.1.1' >> + compile 'org.apache.geronimo.components:geronimo-transaction:3.1.1' >> + compile 'org.apache.geronimo.specs:geronimo-activation_1.0.2_spec:1.0' >> + compile >> 'org.apache.geronimo.specs:geronimo-j2ee-connector_1.5_spec:2.0.0' >> + compile 'org.apache.geronimo.specs:geronimo-jaxr_1.0_spec:1.0' >> + compile 'org.apache.geronimo.specs:geronimo-jaxrpc_1.1_spec:1.1' >> + compile 'org.apache.geronimo.specs:geronimo-jms_1.1_spec:1.1.1' >> + compile 'org.apache.geronimo.specs:geronimo-jta_1.1_spec:1.1.1' >> + compile 'org.apache.geronimo.specs:geronimo-saaj_1.3_spec:1.1' >> + compile 'org.apache.httpcomponents:httpclient-cache:4.4.1' >> + compile 'org.apache.httpcomponents:httpcore:4.4.1' >> + compile 'org.apache.logging.log4j:log4j-1.2-api:2.3' >> + compile 'org.apache.logging.log4j:log4j-api:2.3' >> + compile 'org.apache.logging.log4j:log4j-core:2.3' >> + compile 'org.apache.logging.log4j:log4j-nosql:2.3' >> + compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.3' >> + compile 'org.apache.neethi:neethi:3.0.3' >> + compile 'org.apache.pdfbox:fontbox:1.8.11' >> + compile 'org.apache.pdfbox:jempbox:1.8.11' >> + compile 'org.apache.pdfbox:pdfbox:1.8.12' >> + compile 'org.apache.poi:poi:3.14' >> + compile >> 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.xpp3:1.1.4c_7' >> + compile 'org.apache.shiro:shiro-core:1.2.5' >> + compile 'org.apache.tika:tika-core:1.12' >> + compile 'org.apache.tika:tika-parsers:1.12' >> + compile 'org.apache.tomcat:tomcat-annotations-api:7.0.54' >> + compile 'org.apache.tomcat:tomcat-api:8.0.33' >> + compile 'org.apache.tomcat:tomcat-catalina-ha:8.0.33' >> + compile 'org.apache.tomcat:tomcat-catalina:8.0.33' >> + compile 'org.apache.tomcat:tomcat-coyote:8.0.33' >> + compile 'org.apache.tomcat:tomcat-jasper:8.0.33' >> + compile 'org.apache.tomcat:tomcat-jni:8.0.33' >> + compile 'org.apache.tomcat:tomcat-tribes:8.0.33' >> + compile 'org.apache.tomcat:tomcat-util-scan:8.0.33' >> + compile 'org.apache.tomcat:tomcat-util:8.0.33' >> + compile 'org.apache.tomcat.embed:tomcat-embed-websocket:8.0.33' >> + compile 'org.apache.tomcat.extras:tomcat-extras-juli-adapters:8.0.33' >> + compile 'org.apache.tomcat.extras:tomcat-extras-juli:8.0.33' >> + compile 'org.apache.woden:woden-core:1.0M10' >> + compile 'org.apache.ws.commons.axiom:axiom-api:1.2.17' >> + compile 'org.apache.ws.commons.axiom:axiom-impl:1.2.17' >> + compile 'org.apache.ws.commons.util:ws-commons-util:1.0.2' >> + compile 'org.apache.ws.xmlschema:xmlschema-core:2.2.1' >> + compile >> 'org.apache.xalan:com.springsource.org.apache.xml.serializer:2.7.1' >> + compile 'org.apache.xmlgraphics:fop:2.1' >> + compile 'org.apache.xmlgraphics:xmlgraphics-commons:2.1' >> + compile 'org.apache.xmlrpc:xmlrpc-client:3.1.2' >> + compile 'org.apache.xmlrpc:xmlrpc-common:3.1.2' >> + compile 'org.apache.xmlrpc:xmlrpc-server:3.1.2' >> + compile >> 'org.codeartisans.thirdparties.swing:batik-all:1.8pre-r1084380' >> + compile 'org.codehaus.groovy:groovy-all:2.4.5' >> + compile 'org.dom4j:com.springsource.org.dom4j:1.6.1' >> + compile 'org.eclipse.jdt.core.compiler:ecj:4.5' >> + compile 'org.freemarker:freemarker:2.3.24-incubating' >> + compile 'org.hamcrest:hamcrest-all:1.3' >> + compile 'org.jdom:jdom:1.1' >> + compile 'org.lucee:commons-lang:2.6.0' >> + compile 'org.owasp.esapi:esapi:2.1.0' >> + compile 'org.slf4j:slf4j-api:1.6.4' >> + compile 'org.springframework:spring-core:4.2.3.RELEASE' >> + compile 'org.springframework:spring-test:4.2.3.RELEASE' >> + compile 'org.zapodot:jackson-databind-java-optional:2.4.2' >> + compile 'oro:oro:2.0.8' >> + compile 'ws-commons-java5:ws-commons-java5:1.0.1' >> + compile 'wsdl4j:wsdl4j:1.6.2' >> + compile 'xalan:xalan:2.7.2' >> + compile 'xml-apis:xml-apis-ext:1.3.04' >> + compile 'xml-apis:xml-apis:1.4.01' >> + compile 'mysql:mysql-connector-java:5.1.36' >> + compile 'postgresql:postgresql:9.0-801.jdbc4' >> + >> + >> + // plugin libs >> + subprojects.each { subProject -> >> + compile project(path: subProject.path, configuration: >> 'pluginLibsCompile') >> + runtime project(path: subProject.path, configuration: >> 'pluginLibsRuntime') >> + } >> + >> + // libs needed for junitreport >> + junitLibs 'junit:junit:4.12' >> + junitLibs 'org.apache.ant:ant-junit:1.9.7' >> + junitLibs 'org.apache.ant:ant-junit4:1.9.7' >> + >> + // local libs >> + getDirectoryInActiveComponentsIfExists('lib').each { libDir -> >> + compile fileTree(dir: libDir, include: '**/*.jar') >> + } >> + runtime files("${rootDir}/build/libs/ofbiz-base-test.jar") >> +} >> + >> +def excludedJavaSources = [] >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/cybersource/IcsPaymentServices.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealEvents.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/ideal/IdealPaymentServiceTest.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/orbital/OrbitalPaymentServices.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/paypal/PayPalServices.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayPaymentServices.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/securepay/SecurePayServiceTest.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/accounting/thirdparty/verisign/PayflowPro.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayInputStream.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeByteArrayOutputStream.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeServices.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/content/openoffice/OpenOfficeWorker.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/content/report/JREntityListIteratorDataSource.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/content/report/JRMapCollectionDataSource.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareException.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareServices.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/order/thirdparty/taxware/TaxwareUTL.java' >> +excludedJavaSources.add 'ShipmentScaleApplet.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/securityext/thirdparty/truition/TruitionCoReg.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsJXlsViewHandler.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsPdfViewHandler.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsPoiXlsViewHandler.java' >> +excludedJavaSources.add >> 'org/apache/ofbiz/webapp/view/JasperReportsXmlViewHandler.java' >> + >> +sourceSets { >> + main { >> + java { >> + srcDirs = >> getDirectoryInActiveComponentsIfExists('src/main/java') >> + exclude excludedJavaSources >> + } >> + resources { >> + srcDirs = >> getDirectoryInActiveComponentsIfExists('src/main/java') >> + srcDirs += getDirectoryInActiveComponentsIfExists('config') >> + exclude excludedJavaSources >> + } >> + } >> + >> + test { >> + java { >> + srcDirs = >> getDirectoryInActiveComponentsIfExists('src/test/java') >> + } >> + resources { >> + srcDirs = >> getDirectoryInActiveComponentsIfExists('src/test/java') >> + } >> + } >> +} >> + >> +jar { >> + manifest { >> + attributes( >> + "Implementation-Title": project.name, >> + "Main-Class": ofbizMainClass, >> + "Class-Path": getJarManifestClasspathForCurrentOs() >> + ) >> + } >> +} >> + >> +// Eclipse plugin settings >> +eclipse.classpath.file.whenMerged { classpath -> >> + /* The code inside this block removes unnecessary entries >> + * in the .classpath file which are generated automatically >> + * due to the settings in the sourceSets block >> + */ >> + def osName = System.getProperty('os.name').toLowerCase() >> + def osDirSeparator = osName.contains('windows') ? '\\' : '/' >> + >> + iterateOverActiveComponents { component -> >> + def componentName = component.toString() - rootDir.toString() >> + classpath.entries.removeAll { entry -> >> + // remove any "src" entries in .classpath of the form >> /componentName >> + entry.kind == 'src' && >> + entry.path ==~ '.*/+(' + >> componentName.tokenize(osDirSeparator).last() + ')$' >> + } >> + } >> + classpath.entries.removeAll { entry -> >> + /* remove "src" entries in .classpath named: >> + * /framework, /applications, /specialpurpose and /hot-deploy >> + */ >> + entry.kind == 'src' && >> + entry.path ==~ /(\/+framework)$/ || >> + entry.path ==~ /(\/+applications)$/ || >> + entry.path ==~ /(\/+specialpurpose)$/ || >> + entry.path ==~ /(\/+hot-deploy)$/ >> + } >> + getDirectoryInActiveComponentsIfExists('config').each { configDir -> >> + /* remove any "src" entries in .classpath of the form >> componentName/config >> + * >> + * windows format: \framework\base\config >> + * Unix format: /framework/base/config >> + * .classpath format: framework/base/config >> + * >> + * Must convert both windows and unix to .classpath format to >> + * be able to remove it from the file >> + */ >> + def relativeDir = configDir.toString() - rootDir.toString() - >> osDirSeparator >> + def eclipseConfigSrc = osName.contains('windows') ? >> relativeDir.replaceAll("\\\\", "/") : relativeDir >> + classpath.entries.removeAll { entry -> >> + entry.kind == 'src' && >> + entry.path == eclipseConfigSrc >> + } >> + } >> +} >> +tasks.eclipse.dependsOn(cleanEclipse) >> + >> +/* ======================================================== >> + * Tasks >> + * ======================================================== */ >> + >> +// ========== Task group labels ========== >> +def cleanupGroup = 'Cleaning' >> +def ofbizServer = 'OFBiz Server' >> +def sysadminGroup = 'System Administration' >> +def committerGroup = 'OFBiz committers' >> + >> +// ========== OFBiz Server tasks ========== >> + >> +task loadDefault(group: ofbizServer) { >> + dependsOn 'ofbiz --load-data' >> + description 'Load default data; meant for OFBiz development, testing, >> and demo purposes' >> +} >> + >> +task testIntegration(group: ofbizServer) { >> + dependsOn 'ofbiz --test' >> + description 'Run OFBiz integration tests; You must run loadDefault >> before running this task' >> +} >> + >> +task terminateOfbiz(group: ofbizServer, >> + description: 'Force termination of any running OFBiz servers, only >> use if \"--shutdown\" command fails') << { >> + def os = System.getProperty("os.name").toLowerCase() >> + if (os.contains("windows")) { >> + Runtime.getRuntime().exec("wmic process where \"CommandLine Like >> \'%org.apache.ofbiz.base.start.Start%\'\" Call Terminate") >> + } else { >> + def processOutput = new ByteArrayOutputStream() >> + exec { >> + commandLine 'ps', 'ax' >> + standardOutput = processOutput >> + } >> + processOutput.toString().split(System.lineSeparator()).each { >> line -> >> + if(line ==~ /.*org\.apache\.ofbiz\.base\.start\.Start.*/) { >> + exec { commandLine 'kill', '-9', line.tokenize().first() } >> + } >> + } >> + } >> +} >> + >> +task loadAdminUserLogin(group: ofbizServer) { >> + description 'Create admin user with temporary password equal to >> ofbiz. You must provide userLoginId' >> + createOfbizCommandTask('executeLoadAdminUser', >> + ['--load-data', 'file=/runtime/tmp/AdminUserLoginData.xml'], >> + jvmArguments, false) >> + executeLoadAdminUser.doFirst { >> + copy { >> + from >> ("${rootDir}/framework/resources/templates/AdminUserLoginData.xml") { >> + filter(ReplaceTokens, tokens: [userLoginId: userLoginId]) >> + } >> + into "${rootDir}/runtime/tmp/" >> + } >> + } >> + dependsOn executeLoadAdminUser >> + doLast { >> + delete("${rootDir}/runtime/tmp/AdminUserLoginData.xml") >> + } >> +} >> + >> +task loadTenant(group: ofbizServer, description: 'Load data using >> tenantId') { >> + >> + createOfbizCommandTask('executeLoadTenant', [], jvmArguments, false) >> + >> + if(project.hasProperty('tenantId')) { >> + executeLoadTenant.args '--load-data' >> + executeLoadTenant.args "delegator=default#${tenantId}" >> + } >> + if(project.hasProperty('tenantReaders')) { >> + executeLoadTenant.args '--load-data' >> + executeLoadTenant.args "readers=${tenantReaders}" >> + } >> + if(project.hasProperty('tenantComponent')) { >> + executeLoadTenant.args '--load-data' >> + executeLoadTenant.args "component=${tenantComponent}" >> + } >> + >> + doLast { >> + if(!project.hasProperty('tenantId')) { >> + throw new GradleException('Missing project property tenantId') >> + } >> + } >> + dependsOn executeLoadTenant >> +} >> + >> +task createTenant(group: ofbizServer, description: 'Create a new tenant >> in your environment') { >> + >> + def databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" >> + >> + task prepareAndValidateTenantArguments << { >> + if(!project.hasProperty('tenantId')) { >> + throw new GradleException('Project property tenantId is >> missing') >> + } >> + if(!project.hasProperty('tenantName')) { >> + throw new GradleException('Project property tenantName is >> missing') >> + } >> + // dbPlatform values: D(Derby), M(MySQL), O(Oracle), >> P(PostgreSQL) (default D) >> + if(project.hasProperty('dbPlatform')) { >> + if(dbPlatform == 'D') { >> + databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-Derby.xml" >> + } else if(dbPlatform == 'M') { >> + databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-MySQL.xml" >> + } else if(dbPlatform == 'O') { >> + databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-Oracle.xml" >> + } else if(dbPlatform == 'P') { >> + databaseTemplateFile = >> "${rootDir}/framework/resources/templates/AdminNewTenantData-PostgreSQL.xml" >> + } else { >> + throw new GradleException('Invalid value for property >> dbPlatform: ' + "${dbPlatform}") >> + } >> + } >> + } >> + >> + task generateDatabaseTemplateFile(dependsOn: >> prepareAndValidateTenantArguments) << { >> + def filterTokens = ['tenantId': tenantId, >> + 'tenantName': tenantName, >> + 'domainName': project.hasProperty('domainName')? >> "${domainName}":'org.apache.ofbiz', >> + 'db-IP': project.hasProperty('dbIp')? "${dbIp}":'', >> + 'db-User': project.hasProperty('dbUser')? "${dbUser}":'', >> + 'db-Password': project.hasProperty('dbPassword')? >> "${dbPassword}":''] >> + >> + generateFileFromTemplate(databaseTemplateFile, 'runtime/tmp', >> + filterTokens, 'tmpFilteredTenantData.xml') >> + } >> + >> + task generateAdminUserTemplateFile(dependsOn: >> prepareAndValidateTenantArguments) << { >> + generateFileFromTemplate( >> + >> "${rootDir}/framework/resources/templates/AdminUserLoginData.xml", >> + 'runtime/tmp', >> + ['userLoginId': "${tenantId}-admin".toString()], >> + 'tmpFilteredUserLogin.xml') >> + } >> + >> + // Load the tenants master database >> + createOfbizCommandTask('loadTenantOnDefaultDelegator', >> + ['--load-data', 'file=/runtime/tmp/tmpFilteredTenantData.xml'], >> + jvmArguments, false) >> + loadTenantOnDefaultDelegator.dependsOn(generateDatabaseTemplateFile, >> generateAdminUserTemplateFile) >> + >> + // Load the actual tenant data >> + createOfbizCommandTask('loadTenantData', [], jvmArguments, false) >> + loadTenantData.dependsOn(loadTenantOnDefaultDelegator) >> + >> + // Load the tenant admin user account >> + createOfbizCommandTask('loadTenantAdminUserLogin', [], jvmArguments, >> false) >> + loadTenantAdminUserLogin.dependsOn(loadTenantData) >> + >> + /* pass arguments to tasks, must be done this way >> + * because we are in the configuration phase. We cannot >> + * set the parameters at the execution phase. */ >> + if(project.hasProperty('tenantId')) { >> + loadTenantData.args '--load-data' >> + loadTenantData.args "delegator=default#${tenantId}" >> + >> + loadTenantAdminUserLogin.args '--load-data' >> + loadTenantAdminUserLogin.args "delegator=default#${tenantId}" >> + loadTenantAdminUserLogin.args '--load-data' >> + loadTenantAdminUserLogin.args >> "file=${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml" >> + } >> + if(project.hasProperty('tenantReaders')) { >> + loadTenantData.args '--load-data' >> + loadTenantData.args "readers=${tenantReaders}" >> + } >> + >> + dependsOn(loadTenantAdminUserLogin) >> + >> + // cleanup >> + doLast { >> + delete("${rootDir}/runtime/tmp/tmpFilteredTenantData.xml") >> + delete("${rootDir}/runtime/tmp/tmpFilteredUserLogin.xml") >> + } >> +} >> + >> +// ========== System Administration tasks ========== >> +task createComponent(group: sysadminGroup, description: 'Create the >> layout of an OFBiz component in the hot-deploy folder.') << { >> + >> + def filterTokens = ['component-name': componentName, >> + 'component-resource-name': componentResourceName, >> + 'webapp-name': webappName, >> + 'base-permission': basePermission] >> + def templateDir = "${rootDir}/framework/resources/templates" >> + def componentDir = "${rootDir}/hot-deploy/${componentName}" >> + >> + logger.info('Creating a component with the following properties: ') >> + logger.info(" - componentName: ${componentName}") >> + logger.info(" - componentResourceName: ${componentResourceName}") >> + logger.info(" - webappName: ${webappName}") >> + logger.info(" - basePermission: ${basePermission}") >> + >> + mkdir componentDir >> + mkdir componentDir+"/config" >> + mkdir componentDir+"/data" >> + mkdir componentDir+"/data/helpdata" >> + mkdir componentDir+"/dtd" >> + mkdir componentDir+"/documents" >> + mkdir componentDir+"/entitydef" >> + mkdir componentDir+"/lib" >> + mkdir componentDir+"/patches" >> + mkdir componentDir+"/patches/test" >> + mkdir componentDir+"/patches/qa" >> + mkdir componentDir+"/patches/production" >> + mkdir componentDir+"/script" >> + mkdir componentDir+"/servicedef" >> + mkdir componentDir+"/src" >> + mkdir componentDir+"/testdef" >> + mkdir componentDir+"/webapp" >> + mkdir componentDir+"/webapp/${webappName}" >> + mkdir componentDir+"/webapp/${webappName}/error" >> + mkdir componentDir+"/webapp/${webappName}/WEB-INF" >> + mkdir componentDir+"/webapp/${webappName}/WEB-INF/actions" >> + mkdir componentDir+"/widget/" >> + >> + generateFileFromTemplate(templateDir+"/ofbiz-component.xml", >> componentDir, >> + filterTokens, "ofbiz-component.xml") >> + generateFileFromTemplate(templateDir+"/TypeData.xml", >> componentDir+"/data", >> + filterTokens, "${componentResourceName}TypeData.xml") >> + >> generateFileFromTemplate(templateDir+"/SecurityPermissionSeedData.xml", >> componentDir+"/data", >> + filterTokens, >> "${componentResourceName}SecurityPermissionSeedData.xml") >> + generateFileFromTemplate(templateDir+"/SecurityGroupDemoData.xml", >> componentDir+"/data", >> + filterTokens, "${componentResourceName}SecurityGroupDemoData.xml") >> + generateFileFromTemplate(templateDir+"/DemoData.xml", >> componentDir+"/data", >> + filterTokens, "${componentResourceName}DemoData.xml") >> + generateFileFromTemplate(templateDir+"/HELP.xml", >> componentDir+"/data/helpdata", >> + filterTokens, "HELP_${componentResourceName}.xml") >> + generateFileFromTemplate(templateDir+"/document.xml", >> componentDir+"/documents", >> + filterTokens, "${componentResourceName}.xml") >> + generateFileFromTemplate(templateDir+"/entitymodel.xml", >> componentDir+"/entitydef", >> + filterTokens, "entitymodel.xml") >> + generateFileFromTemplate(templateDir+"/services.xml", >> componentDir+"/servicedef", >> + filterTokens, "services.xml") >> + generateFileFromTemplate(templateDir+"/Tests.xml", >> componentDir+"/testdef", >> + filterTokens, "${componentResourceName}Tests.xml") >> + generateFileFromTemplate(templateDir+"/UiLabels.xml", >> componentDir+"/config", >> + filterTokens, "${componentResourceName}UiLabels.xml") >> + generateFileFromTemplate(templateDir+"/index.jsp", >> componentDir+"/webapp/${webappName}", >> + filterTokens, "index.jsp") >> + generateFileFromTemplate(templateDir+"/error.jsp", >> componentDir+"/webapp/${webappName}/error", >> + filterTokens, "error.jsp") >> + generateFileFromTemplate(templateDir+"/controller.xml", >> componentDir+"/webapp/${webappName}/WEB-INF", >> + filterTokens, "controller.xml") >> + generateFileFromTemplate(templateDir+"/web.xml", >> componentDir+"/webapp/${webappName}/WEB-INF", >> + filterTokens, "web.xml") >> + generateFileFromTemplate(templateDir+"/CommonScreens.xml", >> componentDir+"/widget", >> + filterTokens, "CommonScreens.xml") >> + generateFileFromTemplate(templateDir+"/Screens.xml", >> componentDir+"/widget", >> + filterTokens, "${componentResourceName}Screens.xml") >> + generateFileFromTemplate(templateDir+"/Menus.xml", >> componentDir+"/widget", >> + filterTokens, "${componentResourceName}Menus.xml") >> + generateFileFromTemplate(templateDir+"/Forms.xml", >> componentDir+"/widget", >> + filterTokens, "${componentResourceName}Forms.xml") >> + >> + logger.info("Component successfully created in folder >> ${rootDir}/hot-deploy/${componentName}.") >> + logger.info("Restart OFBiz and then visit the URL: >> https://localhost:8443/${webappName}") >> +} >> + >> +task createTestReports(group: sysadminGroup, description: 'Generate HTML >> reports from junit XML output') << { >> + ant.taskdef(name: 'junitreport', >> + classname: >> 'org.apache.tools.ant.taskdefs.optional.junit.XMLResultAggregator', >> + classpath: configurations.junitLibs.asPath) >> + ant.junitreport(todir: './runtime/logs/test-results') { >> + fileset(dir: './runtime/logs/test-results') { >> + include(name: '*.xml') >> + } >> + report(format:'frames', todir:'./runtime/logs/test-results/html') >> + } >> +} >> +/* >> + * TODO replace this code with something more declarative. >> + * We are using it so that if tests fail we still get HTML reports >> + */ >> +gradle.taskGraph.afterTask { Task task, TaskState state -> >> + if (task.name ==~ /^ofbiz.*--test.*/ >> + || task.name ==~ /^ofbiz.*-t.*/) { >> + tasks.createTestReports.execute() >> + } >> +} >> + >> +// ========== Clean up tasks ========== >> +task cleanCatalina(group: cleanupGroup, description: 'Clean Catalina data >> in runtime/catalina/work') << { >> + delete "${rootDir}/runtime/catalina/work" >> +} >> +task cleanData(group: cleanupGroup, description: 'Clean all DB data >> (Derby) under runtime/data') << { >> + deleteAllInDirWithExclusions("${rootDir}/runtime/data/", ['README', >> 'derby.properties']) >> +} >> +task cleanDownloads(group: cleanupGroup, description: 'Clean all >> downloaded files') << { >> + delete fileTree(dir: "${rootDir}/framework/base/lib", includes: >> ['activemq-*.jar']) >> + delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", >> includes: ['postgresql-*.jar']) >> + delete fileTree(dir: "${rootDir}/framework/entity/lib/jdbc", >> includes: ['mysql-*.jar']) >> +} >> +task cleanLogs(group: cleanupGroup, description: 'Clean all logs in >> runtime/logs') << { >> + deleteAllInDirWithExclusions("${rootDir}/runtime/logs/", ['README']) >> +} >> +task cleanOutput(group: cleanupGroup, description: 'Clean runtime/output >> directory') << { >> + deleteAllInDirWithExclusions("${rootDir}/runtime/output/", ['README']) >> +} >> +task cleanIndexes(group: cleanupGroup, description: 'Remove search >> indexes (e.g. Lucene) from runtime/indexes') << { >> + deleteAllInDirWithExclusions("${rootDir}/runtime/indexes/", >> ['README', 'index.properties']) >> +} >> +task cleanTempfiles(group: cleanupGroup, description: 'Remove file in >> runtime/tempfiles') << { >> + deleteAllInDirWithExclusions("${rootDir}/runtime/tempfiles/", >> ['README']) >> + deleteAllInDirWithExclusions("${rootDir}/runtime/tmp/", ['README']) >> +} >> +task cleanUploads(group: cleanupGroup, description: 'Remove uploaded >> files.') << { >> + deleteAllInDirWithExclusions("${rootDir}/runtime/uploads/", []) >> +} >> +task cleanXtra(group: cleanupGroup, description: 'Clean extra generated >> files like .rej, .DS_Store, etc.') << { >> + delete fileTree(dir: "${rootDir}", includes: ['**/.nbattrs', >> '**/*~','**/.#*', '**/.DS_Store', '**/*.rej', '**/*.orig']) >> +} >> +task cleanGradle(group: cleanupGroup, description: 'clean generated files >> from Gradle') << { >> + delete file("${rootDir}/.gradle") >> +} >> + >> +def cleanTasks = getTasksMatchingRegex(/^clean.+/) >> +task cleanAll(group: cleanupGroup, dependsOn: [cleanTasks, clean]) { >> + description 'Execute all cleaning tasks.' >> +} >> + >> +task cleanAntBuild(type: Delete, description: "Sort Term Task: clean old >> build dirs generated by Ant and the old ofbiz.jar in OFBiz root dir, see >> OFBIZ-7898") { >> + FileCollection applicationsBuildDirs = >> files("${rootDir}/applications/content/build.xml", >> "${rootDir}/applications/party/build.xml", >> "${rootDir}/applications/workeffort/build.xml", >> + "${rootDir}/applications/product/build.xml", >> "${rootDir}/applications/marketing/build.xml", >> "${rootDir}/applications/order/build.xml", >> "${rootDir}/applications/manufacturing/build.xml", >> + "${rootDir}/applications/accounting/build.xml", >> "${rootDir}/applications/securityext/build.xml", "${rootDir}/applications/ >> humanres/build.xml") >> + >> + >> + FileCollection frameworkBuildDirs = >> files("${rootDir}/framework/start/build.xml,base/build.xml", >> "${rootDir}/framework/entity/build.xml", >> "${rootDir}/framework/geronimo/build.xml", >> + "${rootDir}/framework/catalina/build.xml", >> "${rootDir}/framework/security/build.xml", >> "${rootDir}/framework/service/build.xml", >> "${rootDir}/framework/entityext/build.xml", >> + "${rootDir}/framework/minilang/build.xml", >> "${rootDir}/framework/webapp/build.xml", >> "${rootDir}/framework/widget/build.xml", >> "${rootDir}/framework/common/build.xml", >> + "${rootDir}/framework/datafile/build.xml", >> "${rootDir}/framework/testtools/build.xml", >> "${rootDir}/framework/webtools/build.xml") >> + >> + FileCollection specialpurposeBuildDirs = >> files("${rootDir}/specialpurpose/assetmaint/build.xml", >> "${rootDir}/specialpurpose/birt/build.xml", >> "${rootDir}/specialpurpose/ebay/build.xml", >> + "${rootDir}/specialpurpose/ebaystore/build.xml", >> "${rootDir}/specialpurpose/ecommerce/build.xml", >> "${rootDir}/specialpurpose/example/build.xml", >> "${rootDir}/specialpurpose/hhfacility/build.xml", >> + "${rootDir}/specialpurpose/ldap/build.xml", >> "${rootDir}/specialpurpose/lucene/build.xml", >> "${rootDir}/specialpurpose/solr/build.xml", >> "${rootDir}/specialpurpose/oagis/build.xml", >> + "${rootDir}/specialpurpose/pos/build.xml", >> "${rootDir}/specialpurpose/projectmgr/build.xml", >> "${rootDir}/specialpurpose/scrum/build.xml", >> "${rootDir}/specialpurpose/bi/build.xml", >> + "${rootDir}/specialpurpose/ webpos/build.xml", >> "${rootDir}/specialpurpose/passport/build.xml") >> + >> + FileCollection buildDirs = files("ofbiz.jar") + >> applicationsBuildDirs + frameworkBuildDirs + specialpurposeBuildDirs >> + >> + delete(buildDirs) >> +} >> + >> +// ========== Tasks for OFBiz committers ========== >> +def websiteDir = "${rootDir}/../site" >> +task copyDtds(group: committerGroup, description: 'Copy all DTDs from >> OFBiz instance to website') << { >> + mkdir websiteDir+'/dtds' >> + copy { >> + from(fileTree("${rootDir}").files) { >> + include '**/*.xsd' >> + exclude '**/002*.xsd' >> + exclude '**/068*.xsd' >> + exclude '**/161*.xsd' >> + exclude '**/196*.xsd' >> + exclude '**/197*.xsd' >> + } >> + into websiteDir+'/dtds' >> + } >> +} >> + >> +task gitInfoFooter(group: committerGroup, description: 'Update the Git >> Branch-revision info in the footer') << { >> + def branch >> + def revision >> + def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' >> + File gitFooterFile = new File("${rootDir}/runtime/GitInfo.ftl") >> + >> + def branchOutput = new ByteArrayOutputStream() >> + exec{ >> + commandLine 'git', 'rev-parse', '--abbrev-ref', 'HEAD' >> + standardOutput = branchOutput >> + } >> + branch = branchOutput.toString() >> + def revisionOutput = new ByteArrayOutputStream() >> + exec{ >> + commandLine 'git', 'rev-parse', 'HEAD' >> + standardOutput = revisionOutput >> + } >> + revision = revisionOutput.toString() >> + gitFooterFile.delete() >> + gitFooterFile.createNewFile() >> + gitFooterFile << "Branch: ${branch}" >> + gitFooterFile << "Revision: ${revision}" >> + gitFooterFile << "Built on: ${timestamp}" + System.lineSeparator() >> + gitFooterFile << "Java Version: >> ${org.gradle.internal.jvm.Jvm.current()}" >> +} >> + >> +task svnInfoFooter(group: committerGroup, description: 'Update the >> Subversion revision info in the footer') << { >> + def timestamp = new Date().format 'yyyy-MM-dd HH:mm:ss' >> + File svnFooterFile = new File("${rootDir}/runtime/SvnInfo.ftl") >> + def svnOutput = new ByteArrayOutputStream() >> + exec{ >> + commandLine 'svn', 'info', '--xml' >> + standardOutput = svnOutput >> + } >> + def info = new XmlParser().parseText(svnOutput.toString()) >> + svnFooterFile.delete() >> + svnFooterFile.createNewFile() >> + svnFooterFile << "Branch: ${info.entry.url.text()}" + >> System.lineSeparator() >> + svnFooterFile << "Revision: ${info.entry.commit.@revision}" + >> System.lineSeparator() >> + svnFooterFile << "Built on: ${timestamp}" + System.lineSeparator() >> + svnFooterFile << "Java Version: >> ${org.gradle.internal.jvm.Jvm.current()}" >> +} >> + >> +// ========== hidden support tasks ========== >> + >> +/* without executing this task, a test would fail that is named >> + * >> org.apache.ofbiz.base.util.test.UtilObjectTests.testGetObjectFromFactory() >> + * >> + * The test fails because it requires defining a service provider, read >> more below. >> + * >> http://docs.oracle.com/javase/8/docs/technotes/guides/jar/jar.html#Service_Provider >> + */ >> +task createBaseTestServiceProviderJar << { >> + ant.jar(destfile: "${rootDir}/build/libs/ofbiz-base-test.jar") { >> + service(type: >> 'org.apache.ofbiz.base.util.test.UtilObjectTests$TestFactoryIntf') { >> + provider(classname: >> 'org.apache.ofbiz.base.util.test.UtilObjectTests$FirstTestFactory') >> + provider(classname: >> 'org.apache.ofbiz.base.util.test.UtilObjectTests$SecondTestFactory') >> + } >> + } >> +} >> +classes.dependsOn createBaseTestServiceProviderJar >> + >> +/* ======================================================== >> + * Rules-based OFBiz server commands >> + * ======================================================== */ >> + >> +tasks.addRule('Pattern: ofbiz <Commands>: Execute OFBiz startup >> commands') { String taskName -> >> + if(taskName ==~ /^ofbiz\s.*/ || taskName == 'ofbiz') { >> + def arguments = (taskName - 'ofbiz').toLowerCase().tokenize(' ') >> + createOfbizCommandTask(taskName, arguments, jvmArguments, false) >> + } >> +} >> + >> +tasks.addRule('Pattern: ofbizDebug <Commands>: Execute OFBiz startup >> commands in remote debug mode') { String taskName -> >> + if(taskName ==~ /^ofbizDebug\s.*/ || taskName == 'ofbizDebug') { >> + def arguments = (taskName - >> 'ofbizDebug').toLowerCase().tokenize(' ') >> + createOfbizCommandTask(taskName, arguments, jvmArguments, true) >> + } >> +} >> + >> +tasks.addRule('Pattern: ofbizSecure <Commands>: Execute OFBiz startup >> commands pre-loading the notsoserial Java agent') { String taskName -> >> + if(taskName ==~ /^ofbizSecure\s.*/ || taskName == 'ofbizSecure') { >> + def arguments = (taskName - >> 'ofbizSecure').toLowerCase().tokenize(' ') >> + jvmArguments.add('-server') >> + >> jvmArguments.add("-javaagent:${rootDir}/tools/security/notsoserial/notsoserial-1.0-SNAPSHOT.jar") >> + >> jvmArguments.add("-Dnotsoserial.whitelist=${rootDir}/tools/security/notsoserial/empty.txt") >> + >> jvmArguments.add("-Dnotsoserial.dryrun=${rootDir}/tools/security/notsoserial/is-deserialized.txt") >> + >> jvmArguments.add("-Dnotsoserial.trace=${rootDir}/tools/security/notsoserial/deserialize-trace.txt") >> + createOfbizCommandTask(taskName, arguments, jvmArguments, false) >> + } >> +} >> + >> +tasks.addRule('Pattern: ofbizBackground <Commands>: Execute OFBiz startup >> commands in background and output to console.log') { String taskName -> >> + if(taskName ==~ /^ofbizBackground\s.*/ || taskName == >> 'ofbizBackground') { >> + createOfbizBackgroundCommandTask(taskName) >> + } >> +} >> + >> +tasks.addRule('Pattern: ofbizBackgroundSecure <Commands>: Execute OFBiz >> startup commands in background (secure mode) and output to console.log') { >> String taskName -> >> + if(taskName ==~ /^ofbizBackgroundSecure\s.*/ || taskName == >> 'ofbizBackgroundSecure') { >> + createOfbizBackgroundCommandTask(taskName) >> + } >> +} >> + >> +/* ======================================================== >> + * Helper Functions >> + * ======================================================== */ >> + >> +def createOfbizCommandTask(taskName, arguments, jvmArguments, >> isDebugMode) { >> + >> + def ofbizJarName = buildDir.toString()+'/libs/'+project.name+'.jar' >> + >> + task(type: JavaExec, dependsOn: build, taskName) { >> + jvmArgs(jvmArguments) >> + debug = isDebugMode >> + classpath = files(ofbizJarName) >> + main = ofbizMainClass >> + arguments.each { argument -> >> + args argument >> + } >> + } >> +} >> + >> +def createOfbizBackgroundCommandTask(taskName) { >> + def os = System.getProperty("os.name").toLowerCase() >> + def sourceTask = taskName.tokenize().first() >> + def arguments = (taskName - sourceTask) >> + >> + def targetTask >> + def gradleRunner >> + >> + if(sourceTask == 'ofbizBackground') { >> + targetTask = 'ofbiz' >> + } else if(sourceTask == 'ofbizBackgroundSecure') { >> + targetTask = 'ofbizSecure' >> + } >> + >> + if (os.contains("windows")) { >> + gradleRunner = 'gradlew' >> + } else { >> + gradleRunner = './gradlew' >> + } >> + >> + task (taskName) { >> + doLast { >> + spawnProcess(gradleRunner, "${targetTask} ${arguments}") >> + } >> + } >> +} >> + >> +def spawnProcess(command, arguments) { >> + ProcessBuilder pb = new ProcessBuilder(command, arguments) >> + File consoleLog = file("${rootDir}/runtime/logs/console.log"); >> + >> + pb.directory(file("${rootDir}")) >> + pb.redirectErrorStream(true) >> + pb.redirectOutput(ProcessBuilder.Redirect.appendTo(consoleLog)) >> + pb.start() >> +} >> + >> +def getDirectoryInActiveComponentsIfExists(String dirName) { >> + def dirInComponents = [] >> + iterateOverActiveComponents { component -> >> + def subDir = file(component.toString() + '/' + dirName) >> + if(subDir.exists()) { >> + dirInComponents.add subDir >> + } >> + } >> + return dirInComponents >> +} >> + >> +def deleteAllInDirWithExclusions(dirName, exclusions) { >> + ant.delete (includeEmptyDirs: 'true', verbose: 'on') { >> + fileset(dir: dirName, includes: '**/*', erroronmissingdir: >> "false") { >> + exclusions.each { exclusion -> >> + exclude name: exclusion >> + } >> + } >> + } >> +} >> + >> +def getTasksMatchingRegex(theRegex) { >> + def filteredTasks = [] >> + tasks.each { task -> >> + if(task.name ==~ theRegex) { >> + filteredTasks.add(task) >> + } >> + } >> + return filteredTasks >> +} >> + >> +def generateFileFromTemplate(templateFileInFullPath, targetDirectory, >> filterTokens, newFileName) { >> + copy { >> + from (templateFileInFullPath) { >> + filter ReplaceTokens, tokens: filterTokens >> + rename templateFileInFullPath.tokenize('/').last(), >> newFileName >> + } >> + into targetDirectory >> + } >> +} >> + >> +def getJarManifestClasspathForCurrentOs() { >> + def osClassPath = '' >> + if(System.getProperty('os.name').toLowerCase().contains('windows')) { >> + configurations.runtime.files.each { cpEntry -> >> + osClassPath += '\\' + cpEntry.toString() + ' ' >> + } >> + } else { >> + osClassPath = configurations.runtime.files.collect { "$it" >> }.join(' ') >> + } >> + return osClassPath >> +} >> >> >> |
Free forum by Nabble | Edit this page |