Author: taher
Date: Sun Jul 24 07:08:55 2016
New Revision: 1753885
URL: http://svn.apache.org/viewvc?rev=1753885&view=rev
Log:
fix build.gradle EOL issue again.
Most likely due to an editor problem in the environment of
Jacques Le Roux which converts the EOL characters from unix
\n to windows \r\n. I had to apply dos2unix to fix it again.
Modified:
ofbiz/trunk/build.gradle
Modified: ofbiz/trunk/build.gradle
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/build.gradle?rev=1753885&r1=1753884&r2=1753885&view=diff
==============================================================================
--- ofbiz/trunk/build.gradle (original)
+++ ofbiz/trunk/build.gradle Sun Jul 24 07:08:55 2016
@@ -1,865 +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 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
-}
+/*
+ * 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
+}