You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2016/07/22 20:48:51 UTC
svn commit: r1753831 - /ofbiz/trunk/build.gradle
Author: jleroux
Date: Fri Jul 22 20:48:51 2016
New Revision: 1753831
URL: http://svn.apache.org/viewvc?rev=1753831&view=rev
Log:
Adds a Gradle "stop" task to stop a running instance, it's a cover of 'ofbiz --shutdown', easier isn't ?
Related with OFBIZ-7534
Modified:
ofbiz/trunk/build.gradle
Modified: ofbiz/trunk/build.gradle
URL: http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753831&r1=1753830&r2=1753831&view=diff
==============================================================================
--- ofbiz/trunk/build.gradle (original)
+++ ofbiz/trunk/build.gradle Fri Jul 22 20:48:51 2016
@@ -1,860 +1,865 @@
-/*
- * 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")
-}
-task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
- /* TODO this task is temporary and should be deleted after some
- * time when users have updated their trees. */
- ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
- file(componentGroup).eachDir { component ->
- delete file(component.toString() + '/build')
- }
- }
- delete 'ofbiz.jar'
-}
-
-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.bat'
- } 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 stop(group: ofbizServer) {
+ dependsOn 'ofbiz --shutdown'
+ description 'Stop currently running instance'
+}
+
+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")
+}
+task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
+ /* TODO this task is temporary and should be deleted after some
+ * time when users have updated their trees. */
+ ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
+ file(componentGroup).eachDir { component ->
+ delete file(component.toString() + '/build')
+ }
+ }
+ delete 'ofbiz.jar'
+}
+
+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.bat'
+ } 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
+}
Re: svn commit: r1753831 - /ofbiz/trunk/build.gradle
Posted by gil portenseigne <gi...@nereide.fr>.
oh ! my mail filters brained me, you already know it, sorry for the noise...
Gil
Le 23/07/2016 � 17:36, gil portenseigne a �crit :
>
> HiJacques,
>
>
> It seems you still got formatting issue, reading the commit below :)
>
>
> Gil
>
>
> Le 22/07/2016 � 22:48, jleroux@apache.org a �crit :
>> Author: jleroux
>> Date: Fri Jul 22 20:48:51 2016
>> New Revision: 1753831
>>
>> URL:http://svn.apache.org/viewvc?rev=1753831&view=rev
>> Log:
>> Adds a Gradle "stop" task to stop a running instance, it's a cover of 'ofbiz --shutdown', easier isn't ?
>> Related with OFBIZ-7534
>>
>> Modified:
>> ofbiz/trunk/build.gradle
>>
>> Modified: ofbiz/trunk/build.gradle
>> URL:http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753831&r1=1753830&r2=1753831&view=diff
>> ==============================================================================
>> --- ofbiz/trunk/build.gradle (original)
>> +++ ofbiz/trunk/build.gradle Fri Jul 22 20:48:51 2016
>> @@ -1,860 +1,865 @@
>> -/*
>> - * 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")
>> -}
>> -task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
>> - /* TODO this task is temporary and should be deleted after some
>> - * time when users have updated their trees. */
>> - ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
>> - file(componentGroup).eachDir { component ->
>> - delete file(component.toString() + '/build')
>> - }
>> - }
>> - delete 'ofbiz.jar'
>> -}
>> -
>> -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.bat'
>> - } 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 stop(group: ofbizServer) {
>> + dependsOn 'ofbiz --shutdown'
>> + description 'Stop currently running instance'
>> +}
>> +
>> +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")
>> +}
>> +task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
>> + /* TODO this task is temporary and should be deleted after some
>> + * time when users have updated their trees. */
>> + ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
>> + file(componentGroup).eachDir { component ->
>> + delete file(component.toString() + '/build')
>> + }
>> + }
>> + delete 'ofbiz.jar'
>> +}
>> +
>> +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.bat'
>> + } 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
>> +}
>>
>>
>
Re: svn commit: r1753831 - /ofbiz/trunk/build.gradle
Posted by gil portenseigne <gi...@nereide.fr>.
HiJacques,
It seems you still got formatting issue, reading the commit below :)
Gil
Le 22/07/2016 � 22:48, jleroux@apache.org a �crit :
> Author: jleroux
> Date: Fri Jul 22 20:48:51 2016
> New Revision: 1753831
>
> URL: http://svn.apache.org/viewvc?rev=1753831&view=rev
> Log:
> Adds a Gradle "stop" task to stop a running instance, it's a cover of 'ofbiz --shutdown', easier isn't ?
> Related with OFBIZ-7534
>
> Modified:
> ofbiz/trunk/build.gradle
>
> Modified: ofbiz/trunk/build.gradle
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753831&r1=1753830&r2=1753831&view=diff
> ==============================================================================
> --- ofbiz/trunk/build.gradle (original)
> +++ ofbiz/trunk/build.gradle Fri Jul 22 20:48:51 2016
> @@ -1,860 +1,865 @@
> -/*
> - * 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")
> -}
> -task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
> - /* TODO this task is temporary and should be deleted after some
> - * time when users have updated their trees. */
> - ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
> - file(componentGroup).eachDir { component ->
> - delete file(component.toString() + '/build')
> - }
> - }
> - delete 'ofbiz.jar'
> -}
> -
> -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.bat'
> - } 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 stop(group: ofbizServer) {
> + dependsOn 'ofbiz --shutdown'
> + description 'Stop currently running instance'
> +}
> +
> +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")
> +}
> +task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
> + /* TODO this task is temporary and should be deleted after some
> + * time when users have updated their trees. */
> + ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
> + file(componentGroup).eachDir { component ->
> + delete file(component.toString() + '/build')
> + }
> + }
> + delete 'ofbiz.jar'
> +}
> +
> +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.bat'
> + } 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
> +}
>
>
Re: svn commit: r1753831 - /ofbiz/trunk/build.gradle
Posted by Jacques Le Roux <ja...@les7arts.com>.
My idea was that we had stop and start before. I'd prefer to keep them.
Sincerely I don't see the point to start OFBiz using "gradlew ofbiz" I'd prefer "gradlew start"
We know it's OFBis, we used start for a "couple" of years (was run before) and it's clear to everyone I guess.
That's why I picked stop, because we had it also before. I don't know though why we turned to shutdown now, which I hope you agree is harder to type.
So I'd like to others opinions about that
Thanks
Jacques
Le 23/07/2016 � 10:52, Taher Alkhateeb a �crit :
> Hi Jacques,
>
> Perhaps we can call it shutdown instead of stop? To maintain the same
> naming convention in a way.
>
> And don't worry about the name being longer :) Gradle accepts shortcuts,
> you can say ./gradlew shut or even ,/gradlew
>
> Regards
>
> Taher Alkhateeb
>
> On Sat, Jul 23, 2016 at 12:29 AM, Jacques Le Roux <
> jacques.le.roux@les7arts.com> wrote:
>
>> OK, the only real change is here
>>
>> +task stop(group: ofbizServer) {
>> + dependsOn 'ofbiz --shutdown'
>> + description 'Stop currently running instance'
>> +}
>> +
>>
>> There is no problems with the repo nor with your svn clients since I put
>> the necessary in the svn config file.
>>
>> But the stupid "Minimalist Gradle Editor" Eclipse plugin is definitely not
>> an option. I have removed it and will only use a Groovy editor for Gradle
>> file in future.
>>
>> Sorry :/
>>
>> Jacques
>>
>>
>> Le 22/07/2016 � 22:48, jleroux@apache.org a �crit :
>>
>>> Author: jleroux
>>> Date: Fri Jul 22 20:48:51 2016
>>> New Revision: 1753831
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1753831&view=rev
>>> Log:
>>> Adds a Gradle "stop" task to stop a running instance, it's a cover of
>>> 'ofbiz --shutdown', easier isn't ?
>>> Related with OFBIZ-7534
>>>
>>> Modified:
>>> ofbiz/trunk/build.gradle
>>>
>>> Modified: ofbiz/trunk/build.gradle
>>> URL:
>>> http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753831&r1=1753830&r2=1753831&view=diff
>>>
>>> ==============================================================================
>>> --- ofbiz/trunk/build.gradle (original)
>>> +++ ofbiz/trunk/build.gradle Fri Jul 22 20:48:51 2016
>>> @@ -1,860 +1,865 @@
>>> -/*
>>> - * 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")
>>> -}
>>> -task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old
>>> artifacts generated by Ant") {
>>> - /* TODO this task is temporary and should be deleted after some
>>> - * time when users have updated their trees. */
>>> - ['framework', 'specialpurpose', 'applications'].each {
>>> componentGroup ->
>>> - file(componentGroup).eachDir { component ->
>>> - delete file(component.toString() + '/build')
>>> - }
>>> - }
>>> - delete 'ofbiz.jar'
>>> -}
>>> -
>>> -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.bat'
>>> - } 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 stop(group: ofbizServer) {
>>> + dependsOn 'ofbiz --shutdown'
>>> + description 'Stop currently running instance'
>>> +}
>>> +
>>> +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}.")
>>
Re: svn commit: r1753831 - /ofbiz/trunk/build.gradle
Posted by Taher Alkhateeb <sl...@gmail.com>.
Hi Jacques,
Perhaps we can call it shutdown instead of stop? To maintain the same
naming convention in a way.
And don't worry about the name being longer :) Gradle accepts shortcuts,
you can say ./gradlew shut or even ,/gradlew
Regards
Taher Alkhateeb
On Sat, Jul 23, 2016 at 12:29 AM, Jacques Le Roux <
jacques.le.roux@les7arts.com> wrote:
> OK, the only real change is here
>
> +task stop(group: ofbizServer) {
> + dependsOn 'ofbiz --shutdown'
> + description 'Stop currently running instance'
> +}
> +
>
> There is no problems with the repo nor with your svn clients since I put
> the necessary in the svn config file.
>
> But the stupid "Minimalist Gradle Editor" Eclipse plugin is definitely not
> an option. I have removed it and will only use a Groovy editor for Gradle
> file in future.
>
> Sorry :/
>
> Jacques
>
>
> Le 22/07/2016 à 22:48, jleroux@apache.org a écrit :
>
>> Author: jleroux
>> Date: Fri Jul 22 20:48:51 2016
>> New Revision: 1753831
>>
>> URL: http://svn.apache.org/viewvc?rev=1753831&view=rev
>> Log:
>> Adds a Gradle "stop" task to stop a running instance, it's a cover of
>> 'ofbiz --shutdown', easier isn't ?
>> Related with OFBIZ-7534
>>
>> Modified:
>> ofbiz/trunk/build.gradle
>>
>> Modified: ofbiz/trunk/build.gradle
>> URL:
>> http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753831&r1=1753830&r2=1753831&view=diff
>>
>> ==============================================================================
>> --- ofbiz/trunk/build.gradle (original)
>> +++ ofbiz/trunk/build.gradle Fri Jul 22 20:48:51 2016
>> @@ -1,860 +1,865 @@
>> -/*
>> - * 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")
>> -}
>> -task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old
>> artifacts generated by Ant") {
>> - /* TODO this task is temporary and should be deleted after some
>> - * time when users have updated their trees. */
>> - ['framework', 'specialpurpose', 'applications'].each {
>> componentGroup ->
>> - file(componentGroup).eachDir { component ->
>> - delete file(component.toString() + '/build')
>> - }
>> - }
>> - delete 'ofbiz.jar'
>> -}
>> -
>> -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.bat'
>> - } 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 stop(group: ofbizServer) {
>> + dependsOn 'ofbiz --shutdown'
>> + description 'Stop currently running instance'
>> +}
>> +
>> +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}.")
>
>
Re: svn commit: r1753831 - /ofbiz/trunk/build.gradle
Posted by Jacques Le Roux <ja...@les7arts.com>.
OK, the only real change is here
+task stop(group: ofbizServer) {
+ dependsOn 'ofbiz --shutdown'
+ description 'Stop currently running instance'
+}
+
There is no problems with the repo nor with your svn clients since I put the necessary in the svn config file.
But the stupid "Minimalist Gradle Editor" Eclipse plugin is definitely not an option. I have removed it and will only use a Groovy editor for Gradle
file in future.
Sorry :/
Jacques
Le 22/07/2016 � 22:48, jleroux@apache.org a �crit :
> Author: jleroux
> Date: Fri Jul 22 20:48:51 2016
> New Revision: 1753831
>
> URL: http://svn.apache.org/viewvc?rev=1753831&view=rev
> Log:
> Adds a Gradle "stop" task to stop a running instance, it's a cover of 'ofbiz --shutdown', easier isn't ?
> Related with OFBIZ-7534
>
> Modified:
> ofbiz/trunk/build.gradle
>
> Modified: ofbiz/trunk/build.gradle
> URL: http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753831&r1=1753830&r2=1753831&view=diff
> ==============================================================================
> --- ofbiz/trunk/build.gradle (original)
> +++ ofbiz/trunk/build.gradle Fri Jul 22 20:48:51 2016
> @@ -1,860 +1,865 @@
> -/*
> - * 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")
> -}
> -task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
> - /* TODO this task is temporary and should be deleted after some
> - * time when users have updated their trees. */
> - ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
> - file(componentGroup).eachDir { component ->
> - delete file(component.toString() + '/build')
> - }
> - }
> - delete 'ofbiz.jar'
> -}
> -
> -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.bat'
> - } 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 stop(group: ofbizServer) {
> + dependsOn 'ofbiz --shutdown'
> + description 'Stop currently running instance'
> +}
> +
> +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")
> +}
> +task cleanAnt(group: cleanupGroup, type: Delete, description: "clean old artifacts generated by Ant") {
> + /* TODO this task is temporary and should be deleted after some
> + * time when users have updated their trees. */
> + ['framework', 'specialpurpose', 'applications'].each { componentGroup ->
> + file(componentGroup).eachDir { component ->
> + delete file(component.toString() + '/build')
> + }
> + }
> + delete 'ofbiz.jar'
> +}
> +
> +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.bat'
> + } 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
> +}
>
>
>