def jettyLogLevel = '-Dorg.eclipse.jetty.LEVEL=WARN' allprojects { apply plugin: 'java' apply plugin: 'application' compileJava { dependsOn 'processSource' sourceCompatibility = JavaVersion.VERSION_1_6 targetCompatibility = JavaVersion.VERSION_1_6 } startScripts { applicationName = 'helma' classpath = files('../launcher.jar') mainClassName = 'helma.main.launcher.Main' defaultJvmOpts = [jettyLogLevel] doLast { // Work-around to make the classpath above work (launcher.jar is located outside of `lib` dir) // See https://discuss.gradle.org/t/classpath-in-application-plugin-is-building-always-relative-to-app-home-lib-directory/2012 def unixScriptFile = file getUnixScript() def windowsScriptFile = file getWindowsScript() unixScriptFile.text = unixScriptFile.text.replace('$APP_HOME/lib', '$APP_HOME') windowsScriptFile.text = windowsScriptFile.text.replace('%APP_HOME%\\lib', '%APP_HOME%') } } task processSource(type: Sync) { def date = new Date().format("MMMM dd, yyyy") def gitOutput = new ByteArrayOutputStream() exec { commandLine 'git', 'describe' standardOutput = gitOutput errorOutput = new ByteArrayOutputStream() ignoreExitValue = true } def description = date def tag = gitOutput.toString().trim() if (tag) description = "$tag; $description" from 'src' filter { line -> line.replaceAll('__builddate__', date) } into "${project.buildDir}/src" } } version = new Date().format("yyyyMMdd") distributions { main { contents { from project(':launcher').jar } } } applicationDistribution.from(projectDir) { include 'modules/**' include 'LICENSE.md' include 'README.md' include 'start.*' } applicationDistribution.from(javadoc.destinationDir) { include '**' into 'docs' } sourceSets { main { java { srcDirs = ["$buildDir/src/main/java"] exclude '**/package.html', '**/main/launcher/**' } } } repositories { mavenCentral() jcenter() } configurations { // Wrapping implementation because it does not allow access to its files // (i.e. cannot be resolved) library.extendsFrom implementation } dependencies { implementation 'commons-codec:commons-codec:1.10' implementation 'commons-fileupload:commons-fileupload:1.4' implementation 'commons-logging:commons-logging:1.2' implementation 'commons-net:commons-net:3.6' implementation 'com.sun.activation:javax.activation:1.2.0' implementation 'javax.mail:javax.mail-api:1.6.2' implementation 'javax.servlet:javax.servlet-api:4.0.1' implementation 'org.ccil.cowan.tagsoup:tagsoup:1.2.1' implementation 'org.eclipse.jetty:jetty-servlet:9.4.18.v20190429' implementation 'org.eclipse.jetty:jetty-xml:9.4.18.v20190429' implementation 'org.mozilla:rhino:1.7.12' implementation 'xerces:xercesImpl:2.12.0' implementation 'xmlrpc:xmlrpc:2.0.1' } distTar { compression = Compression.GZIP } installDist { dependsOn javadoc finalizedBy 'update' } run { classpath = files('launcher.jar') jvmArgs jettyLogLevel } task shell(type: JavaExec) { def rhinoJar = configurations.library.files.find { f -> f.name.startsWith('rhino') } // if (environment.get('TERM') != 'dumb') { // println 'Run this task with `TERM=dumb ./gradlew shell` to get rid of the progress output' // } classpath = files(rhinoJar) main = 'org.mozilla.javascript.tools.shell.Main' standardInput = System.in } task commandline(type: JavaExec) { classpath = files('launcher.jar') main = 'helma.main.launcher.Commandline' args '-h', projectDir, 'manage.getAllApplications' } task update { def rsyncArgs = ['-a', '--info=progress2', '--exclude', 'backups'] def confirm = { ant.input(message: 'Update this installation?', validargs: 'y,n', addproperty: 'continue') return ant.continue == 'y' } onlyIf { confirm() } doFirst { def backupDir = 'backups/' + new Date().format('yyyyMMdd-HHmmss') mkdir backupDir exec { // Using rsync instead of a CopyTask because the latter chokes on multi-byte characters // See https://github.com/gradle/gradle/issues/789 executable 'rsync' args rsyncArgs args "$projectDir/", backupDir } } doLast { exec { // Using rsync instead of installDist task because it does not overwrite the project directory executable 'rsync' args rsyncArgs args '--exclude', 'bin' args "${installDist.destinationDir}/", projectDir } } }