Administrator
|
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, [hidden email] 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 > +} > > > |
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 < [hidden email]> 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, [hidden email] 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}.") > > |
Administrator
|
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 < > [hidden email]> 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, [hidden email] 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}.") >> |
In reply to this post by Jacques Le Roux
Hi Jacques,
It seems you still got formatting issue, reading the commit below :)
Gil Le 22/07/2016 à 22:48,
[hidden email] 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 +} |
oh ! my mail filters brained me, you already know it, sorry for the noise... Le 23/07/2016 à 17:36, gil portenseigne
a écrit :
|
Free forum by Nabble | Edit this page |