import org.gradle.internal.os.OperatingSystem import org.gradle.plugins.ide.eclipse.model.Output import org.gradle.plugins.ide.eclipse.model.Library import com.diffplug.gradle.GoomphCacheLocations buildscript { } plugins { id 'java' id 'application' id 'eclipse' id 'com.diffplug.gradle.oomph.ide' version '3.18.1' id 'com.diffplug.gradle.equinoxlaunch' version '3.18.1' id 'com.diffplug.gradle.eclipse.mavencentral' version '3.18.1' id 'com.diffplug.gradle.p2.asmaven' version '3.18.1' } def jalviewDirAbsolutePath = file(jalviewDir).getAbsolutePath() def useIde = useGoomph.equals("true") repositories { jcenter() mavenCentral() flatDir { dirs gradlePluginsDir } if (true || useIde) { flatDir { dirs jalviewjs_utils_dir+"/"+jalviewjs_eclipse_dropins_dir } } } configurations { jalviewjsIde } if (useIde) { p2AsMaven { group 'eclipseDeps', { repoEclipse goomph_eclipse_repo_version //slicingOption 'latestVersionOnly', 'true' iu 'org.eclipse.update.configurator' iu 'org.eclipse.jdt.apt.core' iu 'org.eclipse.jdt.core' iu 'org.eclipse.jdt.annotation' } group 'ecjDeps', { repo 'https://download.eclipse.org/eclipse/updates/4.13/R-4.13-201909161045/' iu 'org.eclipse.debug.core' iu 'org.eclipse.jdt.apt.pluggable.core' iu 'org.eclipse.jdt.apt.ui' iu 'org.eclipse.jdt.compiler.apt' iu 'org.eclipse.jdt.compiler.tool' iu 'org.eclipse.jdt.core.manipulation' iu 'org.eclipse.jdt.debug' iu 'org.eclipse.jdt.debug.ui' iu 'org.eclipse.jdt.doc.user' iu 'org.eclipse.jdt.junit' iu 'org.eclipse.jdt.junit.core' iu 'org.eclipse.jdt.junit4.runtime' iu 'org.eclipse.jdt.junit4.runtime' iu 'org.eclipse.jdt.junit5.runtime' iu 'org.eclipse.jdt.launching' iu 'org.eclipse.jdt.ui' iu 'org.eclipse.jdt.launching.macosx' iu 'org.eclipse.jdt.launching.ui.macosx' } group 'eclipseOrbit', { repo goomph_orbit_repo slicingOption 'latestVersionOnly', 'true' iu 'javax.el' iu 'javax.servlet' iu 'javax.servlet.jsp' iu 'org.apache.ant' iu 'org.apache.batik.constants' iu 'org.apache.batik.css' iu 'org.apache.batik.i18n' iu 'org.apache.batik.util' iu 'org.apache.commons.beanutils' iu 'org.apache.commons.collections' iu 'org.apache.commons.jxpath' iu 'org.apache.commons.io' iu 'org.apache.commons.logging' iu 'org.apache.xmlgraphics' iu 'org.jdom' iu 'org.w3c.dom.events' iu 'org.w3c.dom.smil' iu 'org.w3c.dom.svg' } } } // if (useIde) {} dependencies { /* source.addMaven('org.eclipse.platform:org.eclipse.osgi:3.14.0') // ... compile 'eclipseOrbit:org.apache.ant:1.10.5.v20190526-1402' // ... compile 'org.osgi:org.osgi.service.component:1.4.0' // ... */ jalviewjsIde name: 'net.sf.j2s.core-3.2.4' jalviewjsIde name: 'com.seeq.eclipse.importprojects-1.4.0' } if (useIde) { eclipseMavenCentral { // TODO: How do I add these to the jalviewjsIde configuration and not the compile configuration? release goomph_eclipse_repo_version, { //def platformCode="cocoa.macosx.x86_64" //compile 'org.eclipse.swt.'+platformCode useNativesForRunningPlatform() compile 'org.eclipse.swt' compile 'org.eclipse.ant.core' compile 'org.eclipse.compare.core' compile 'org.eclipse.core.commands' compile 'org.eclipse.core.contenttype' compile 'org.eclipse.core.jobs' compile 'org.eclipse.core.expressions' compile 'org.eclipse.core.filesystem' compile 'org.eclipse.core.resources' compile 'org.eclipse.core.runtime' compile 'org.eclipse.core.variables' compile 'org.eclipse.equinox.common' compile 'org.eclipse.equinox.ds' compile 'org.eclipse.equinox.app' compile 'org.eclipse.equinox.registry' compile 'org.eclipse.equinox.preferences' compile 'org.eclipse.jface' compile 'org.eclipse.osgi' compile 'org.eclipse.osgi.services' compile 'org.eclipse.ui' compile 'org.eclipse.ui.workbench' compile 'org.eclipse.team.core' compile 'org.eclipse.text' compile 'org.eclipse.e4.core.commands' compile 'org.eclipse.e4.core.contexts' compile 'org.eclipse.e4.core.di' compile 'org.eclipse.e4.core.di.annotations' compile 'org.eclipse.e4.core.di.extensions.supplier' compile 'org.eclipse.e4.core.services' compile 'org.eclipse.e4.ui.bindings' compile 'org.eclipse.e4.ui.model.workbench' compile 'org.eclipse.e4.ui.workbench' compile 'org.eclipse.e4.ui.workbench.swt' compile 'org.eclipse.e4.ui.css.core' compile 'org.eclipse.e4.ui.css.swt' compile 'org.eclipse.e4.ui.css.swt.theme' compile 'org.eclipse.e4.ui.services' compile 'org.eclipse.e4.ui.di' //compile 'org.eclipse.e4.core.di.internal.extensions' // org.eclipse.update.configurator deliberately kept at 3.3.400 see https://github.com/diffplug/goomph/issues/69 // this module downloaded in equinoxLaunch configuration (to specify version) //compile 'org.eclipse.update.configurator' } } } // if (useIde) {} mainClassName = launcherClass def classes = "$jalviewDir/$classesDir" // configure classpath/args for j8/j11 compilation def libDir def libDistDir def compile_source_compatibility def compile_target_compatibility ext { buildProperties = jalviewDir + "/" + classesDir +"/" + buildPropertiesFile gitHash = "" gitBranch = "" jalviewjsServer = "" } def JAVA_INTEGER_VERSION //def additional_compiler_args = [] // this property is for the Java library used in eclipse def eclipse_java_runtime_name if (JAVA_VERSION.equals("1.8")) { JAVA_INTEGER_VERSION = "8" //libDir = j8libDir libDir = j11libDir libDistDir = j8libDir compile_source_compatibility = 1.8 compile_target_compatibility = 1.8 eclipse_java_runtime_name = "JavaSE-1.8" } else if (JAVA_VERSION.equals("11")) { JAVA_INTEGER_VERSION = "11" libDir = j11libDir libDistDir = j11libDir compile_source_compatibility = 11 compile_target_compatibility = 11 eclipse_java_runtime_name = "JavaSE-11" /* compile without modules -- using classpath libraries additional_compiler_args += [ '--module-path', ext.modules_compileClasspath.asPath, '--add-modules', j11modules ] */ } else if (JAVA_VERSION.equals("12") || JAVA_VERSION.equals("13")) { JAVA_INTEGER_VERSION = JAVA_VERSION libDir = j11libDir libDistDir = j11libDir compile_source_compatibility = JAVA_VERSION compile_target_compatibility = JAVA_VERSION eclipse_java_runtime_name = "JavaSE-11" /* compile without modules -- using classpath libraries additional_compiler_args += [ '--module-path', ext.modules_compileClasspath.asPath, '--add-modules', j11modules ] */ } else { throw new GradleException("JAVA_VERSION=$JAVA_VERSION not currently supported by Jalview") } sourceSets { main { java { srcDirs "$jalviewDir/$sourceDir" outputDir = file("$classes") } resources { srcDirs "$jalviewDir/$resourceDir" } compileClasspath = files(sourceSets.main.java.outputDir) compileClasspath += fileTree(dir: "$jalviewDir/$libDir", include: ["*.jar"]) runtimeClasspath = compileClasspath } } eclipse { project { name = eclipse_project_name natures 'org.eclipse.jdt.core.javanature', 'org.eclipse.buildship.core.gradleprojectnature' buildCommand 'org.eclipse.jdt.core.javabuilder' buildCommand 'org.eclipse.buildship.core.gradleprojectbuilder' } classpath { //defaultOutputDir = sourceSets.main.java.outputDir def removeThese = [] configurations.each{ if (it.isCanBeResolved()) { removeThese += it } } minusConfigurations += removeThese plusConfigurations = [ ] file { whenMerged { cp -> def removeTheseToo = [] HashMap addedSrcPath = new HashMap<>(); cp.entries.each { entry -> if (entry.kind == 'src') { if (addedSrcPath.getAt(entry.path) || !(entry.path == sourceDir || entry.path == "test")) { removeTheseToo += entry } else { addedSrcPath.putAt(entry.path, true) } } } cp.entries.removeAll(removeTheseToo) if (file(eclipse_bin_dir+"/main").isDirectory()) { cp.entries += new Output(eclipse_bin_dir+"/main") } if (file(helpParentDir).isDirectory()) { cp.entries += new Library(fileReference(helpParentDir)) } if (file(resourceDir).isDirectory()) { cp.entries += new Library(fileReference(resourceDir)) } HashMap addedLibPath = new HashMap<>(); // changing from sourcesets.main.classpath to specific Java version lib //sourceSets.main.compileClasspath.each{ fileTree("$jalviewDir/$libDistDir").include("**/*.jar").include("*.jar").each { //don't want to add outputDir as eclipse is using its own output dir in bin/main if (it.isDirectory() || ! it.exists()) { // don't add dirs to classpath return } def itPath = it.toString() if (itPath.startsWith(jalviewDirAbsolutePath+"/")) { itPath = itPath.substring(jalviewDirAbsolutePath.length()+1) } if (addedLibPath.get(itPath)) { //println("Not adding duplicate entry "+itPath) } else { //println("Adding entry "+itPath) cp.entries += new Library(fileReference(itPath)) addedLibPath.put(itPath, true) } } } // whenMerged } // file containers 'org.eclipse.buildship.core.gradleclasspathcontainer' } // classpath jdt { // for the IDE, use java 11 compatibility sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility javaRuntimeName = eclipse_java_runtime_name /* file { withProperties { props -> def jalview_prefs = new Properties() def ins = new FileInputStream(jalviewDirAbsolutePath+"/"+eclipse_extra_jdt_prefs_file) jalview_prefs.load(ins) ins.close() jalview_prefs.forEach { t, v -> if (props.getAt(t) == null) { props.putAt(t, v) } } } } */ } // jdt //synchronizationTasks eclipseClasspath //autoBuildTasks eclipseClasspath } // eclipse /* compileJava { doFirst { sourceCompatibility = compile_source_compatibility targetCompatibility = compile_target_compatibility //options.compilerArgs = additional_compiler_args print ("Setting target compatibility to "+targetCompatibility+"\n") } } clean { delete sourceSets.main.java.outputDir } */ def eclipseWorkspace task jalviewjsSetEclipseWorkspace { def eclipseWsDir = useIde?goomph_workspace:jalviewjs_eclipse_workspace eclipseWorkspace = file(eclipseWsDir) if (!eclipseWorkspace.exists()) { eclipseWorkspace = file("${buildDir}/tmp/eclipse-workspace") //eclipseWorkspace.deleteOnExit() } else if (useIde) { com.diffplug.gradle.GoomphCacheLocations.override_workspaces = file(eclipseWorkspace.getAbsolutePath()) eclipseWorkspace = oomphIde.workspaceRegistry.workspaceDir(project, file(oomphIde.ideDir)) } println("ECLIPSE WORKSPACE: "+eclipseWorkspace.getPath()) } if (useIde) { oomphIde { repoEclipse goomph_eclipse_version jdt { /* installedJre { //markDefault = true //executionEnvironments = [ eclipse.jdt.javaRuntimeName ] } */ //compilerComplianceLevel( JAVA_INTEGER_VERSION ) } repo "https://download.eclipse.org/releases/${goomph_eclipse_version_name}/" feature goomph_eclipse_jee_feature, goomph_eclipse_jee_version thirdParty { buildship { repo goomph_repo_buildship feature goomph_feature_buildship } } workspaceProp '.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs', { it.put('org.eclipse.jdt.launching.PREF_VM_XML', goomph_PREF_VM_XML) } // CLI ARGS HERE! } equinoxLaunch { ideJalviewjsBuildSetup { source.addConfiguration(configurations.compile) source.addConfiguration(configurations.jalviewjsIde) source.addMaven('eclipseOrbit:org.apache.ant:1.10.5.v20190526-1402') source.addMaven('eclipseOrbit:javax.servlet:3.1.0.v201410161800') source.addMaven('eclipseOrbit:javax.servlet.jsp:2.2.0.v201112011158') source.addMaven('eclipseOrbit:javax.el:2.2.0.v201303151357') source.addMaven('eclipseOrbit:org.apache.batik.constants:1.11.0.v20190515-0436') source.addMaven('eclipseOrbit:org.apache.batik.css:1.11.0.v20190515-0436') source.addMaven('eclipseOrbit:org.apache.batik.i18n:1.11.0.v20190515-0436') source.addMaven('eclipseOrbit:org.apache.batik.util:1.11.0.v20190515-0436') source.addMaven('eclipseOrbit:org.apache.commons.beanutils:1.8.0.v201205091237') source.addMaven('eclipseOrbit:org.apache.commons.collections:3.2.2.v201511171945') source.addMaven('eclipseOrbit:org.apache.xmlgraphics:2.3.0.v20190515-0436') source.addMaven('eclipseOrbit:org.apache.commons.jxpath:1.3.0.v200911051830') source.addMaven('eclipseOrbit:org.apache.commons.io:2.6.0.v20190123-2029') source.addMaven('eclipseOrbit:org.apache.commons.logging:1.2.0.v20180409-1502') source.addMaven('eclipseOrbit:org.jdom:1.1.1.v201101151400') source.addMaven('eclipseOrbit:org.w3c.dom.svg:1.1.0.v201011041433') source.addMaven('eclipseOrbit:org.w3c.dom.smil:1.0.1.v200903091627') source.addMaven('eclipseOrbit:org.w3c.dom.events:3.0.0.draft20060413_v201105210656') source.addMaven('org.eclipse.birt.runtime:com.ibm.icu:56.1.0.v201601250100') source.addMaven('javax.inject:com.springsource.javax.inject:1.0.0') source.addMaven('org.apache.felix:org.apache.felix.scr:2.1.16') source.addMaven('org.osgi:org.osgi.framework:1.9.0') source.addMaven('org.osgi:org.osgi.service.component:1.4.0') source.addMaven('org.osgi:org.osgi.service.event:1.4.0') source.addMaven('org.osgi:org.osgi.util.promise:1.1.1') source.addMaven('org.osgi:org.osgi.util.function:1.1.0') source.addMaven('ecjDeps:org.eclipse.debug.core:3.14.0.v20190812-1404') source.addMaven('ecjDeps:org.eclipse.jdt.annotation:2.2.300.v20190328-1431') source.addMaven('ecjDeps:org.eclipse.jdt.apt.core:3.6.500.v20190703-0914') source.addMaven('ecjDeps:org.eclipse.jdt.core:3.19.0.v20190903-0936') source.addMaven('ecjDeps:org.eclipse.jdt.apt.pluggable.core:1.2.400.v20190626-1334') //source.addMaven('ecjDeps:org.eclipse.jdt.apt.ui:3.6.300.v20190727-1243') source.addMaven('ecjDeps:org.eclipse.jdt.compiler.apt:1.3.700.v20190704-1731') source.addMaven('ecjDeps:org.eclipse.jdt.compiler.tool:1.2.600.v20190322-0450') //source.addMaven('ecjDeps:org.eclipse.jdt.core.manipulation:1.12.100.v20190904-0645') source.addMaven('ecjDeps:org.eclipse.jdt.debug:3.13.100.v20190902-1050') //source.addMaven('ecjDeps:org.eclipse.jdt.debug.ui:3.10.400.v20190815-2202') source.addMaven('ecjDeps:org.eclipse.jdt.doc.user:3.15.400.v20190904-0724') //source.addMaven('ecjDeps:org.eclipse.jdt.junit:3.11.500.v20190809-1613') //source.addMaven('ecjDeps:org.eclipse.jdt.junit.core:3.10.400.v20190625-1910') //source.addMaven('ecjDeps:org.eclipse.jdt.junit4.runtime:1.1.1000.v20190510-0840') //source.addMaven('ecjDeps:org.eclipse.jdt.junit4.runtime:1.1.1000.v20190510-0840') //source.addMaven('ecjDeps:org.eclipse.jdt.junit5.runtime:1.0.600.v20190610-0439') source.addMaven('ecjDeps:org.eclipse.jdt.launching:3.15.0.v20190826-1639') //source.addMaven('ecjDeps:org.eclipse.jdt.ui:3.19.0.v20190827-1733') //source.addMaven('ecjDeps:org.eclipse.jdt.launching.macosx:3.4.300.v20190510-0639') //source.addMaven('ecjDeps:org.eclipse.jdt.launching.ui.macosx:1.2.300.v20190510-0639') // org.eclipse.update.configurator deliberately kept at 3.3.400 see https://github.com/diffplug/goomph/issues/69 source.addMaven('org.eclipse.platform:org.eclipse.update.configurator:3.3.400') launchTask 'ideJalviewjsImport', { it.args = ["-consoleLog", "-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath ] } launchTask 'ideJalviewjsBuild', { oomphIde.workspaceProp '.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs', { it.put('org.eclipse.jdt.launching.PREF_VM_XML', goomph_PREF_VM_XML) } def args = ["-consoleLog", "-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace.getPath(), "-"+jalviewjs_eclipseBuildArg, eclipse_project_name ] println("ARGS="+args) it.args = args } } } ideSetupWorkspace.dependsOn jalviewjsSetEclipseWorkspace ideSetupWorkspace.outputs.upToDateWhen {file(eclipseWorkspace).exists()} task ideSetup { dependsOn ideSetupP2 dependsOn ideSetupWorkspace } } // if (useIde) {} def jalviewjsBuildDir def jalviewjsSiteDir task jalviewjsSitePath { if (jalviewjs_site_dir.startsWith("/")) { jalviewjsSiteDir = jalviewjs_site_dir } else { def relativeBuildDir = file(jalviewDirAbsolutePath).toPath().relativize(buildDir.toPath()) jalviewjsBuildDir = "${relativeBuildDir}/jalviewjs" jalviewjsSiteDir = jalviewjsBuildDir + "/" + jalviewjs_site_dir } } task jalviewjsUnzipFiles { dependsOn jalviewjsSitePath def zipFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_libjs_dir).include("*.zip") zipFiles += jalviewjs_utils_dir+"/"+jalviewjs_swingjs_zip doLast { zipFiles.each { file_zip -> copy { from zipTree(file_zip) into jalviewjsSiteDir } } } inputs.files zipFiles outputs.dir jalviewjsSiteDir } def eclipseDropinsDir def eclipseBinary task jalviewjsEclipsePaths { def eclipseRoot if (useIde) { eclipseRoot = oomphIde.ideDir eclipseDropinsDir = eclipseRoot+"/"+com.diffplug.gradle.FileMisc.macContentsEclipse()+"/dropins" eclipseBinary = eclipseRoot+"/"+com.diffplug.common.swt.os.OS.getNative().winMacLinux("", "Contents/MacOS", "")+"/eclipse" } else { eclipseRoot = jalviewjs_eclipse_root if (eclipseRoot.startsWith("~")) { eclipseRoot = System.getProperty("user.home") + eclipseRoot.substring(1) } if (OperatingSystem.current().isMacOsX()) { eclipseRoot += "/Eclipse.app" eclipseDropinsDir = eclipseRoot+"/Contents/Eclipse/dropins" eclipseBinary = eclipseRoot+"/Contents/MacOS/eclipse" } else if (OperatingSystem.current().isWindows()) { // check these paths!! eclipseDropinsDir = eclipseRoot+"/dropins" eclipseBinary = eclipseRoot+"/eclipse" } else { // linux or unix eclipseDropinsDir = eclipseRoot+"/dropins" eclipseBinary = eclipseRoot+"/eclipse" } } } task jalviewjsEclipseCopyDropins { dependsOn jalviewjsEclipsePaths def inputFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_eclipse_dropins_dir, include: "*.jar") def outputDir = eclipseDropinsDir inputs.files inputFiles inputFiles.each { file -> outputs.file(outputDir+"/"+file.name) } doLast { def outputFiles = [] inputFiles.each { file -> copy { from file into outputDir } } } } task jalviewjsEclipseSetup { dependsOn jalviewjsEclipseCopyDropins dependsOn jalviewjsSetEclipseWorkspace } task jalviewjsCreateJ2sSettings(type: WriteProperties) { dependsOn jalviewjsSitePath outputFile (jalviewDir+"/"+jalviewjs_j2s_settings) def props = project.properties.sort { it.key } def siteDirProperty = "j2s.site.directory" def setSiteDir = false props.each { prop, val -> if (prop.startsWith("j2s.") && val != null) { if (prop == siteDirProperty) { if (!(val.startsWith("/") || val.startsWith("file://") )) { val = jalviewjsSiteDir+"/"+val } setSiteDir = true } property(prop,val) } if (!setSiteDir) { property(siteDirProperty,"${jalviewjsSiteDir}") } } outputs.file(outputFile) } task jalviewjsCopyResources (type: Copy) { dependsOn jalviewjsSitePath def inputFiles = fileTree(dir: jalviewjs_resource_dir) def outputDir = jalviewjsSiteDir+"/"+jalviewjs_j2s_subdir from inputFiles into outputDir def outputFiles = [] rename { filename -> outputFiles += outputDir+"/"+filename null } outputs.files outputFiles inputs.files inputFiles } task jalviewjsCopySiteResources (type: Copy) { dependsOn jalviewjsSitePath def inputFiles = fileTree(dir: jalviewjs_utils_dir+"/"+jalviewjs_site_resource_dir) def outputDir = jalviewjsSiteDir from inputFiles into outputDir def outputFiles = [] rename { filename -> outputFiles += outputDir+"/"+filename null } outputs.files outputFiles inputs.files inputFiles } task cleanJalviewjs { dependsOn jalviewjsSitePath delete jalviewDir+"/"+jalviewjsSiteDir //delete jalviewDir+"/"+eclipse_bin_dir //delete file(eclipseWorkspace.getAbsolutePath()+"/.metadata") //delete jalviewDir+"/"+jalviewjs_j2s_settings } task jalviewjsProjectImport(type: Exec) { // work out how to do this! dependsOn eclipseProject dependsOn eclipseClasspath dependsOn eclipseJdt dependsOn jalviewjsEclipsePaths dependsOn jalviewjsEclipseSetup executable(eclipseBinary) args(["-nosplash", "--launcher.suppressErrors", "-application", "com.seeq.eclipse.importprojects.headlessimport", "-data", eclipseWorkspace.getPath(), "-import", jalviewDirAbsolutePath]) def projdir = eclipseWorkspace.getPath()+"/.metadata/.plugins/org.eclipse.core.resources/.projects/jalview/org.eclipse.jdt.core" inputs.file(jalviewDir+"/.project") outputs.dir(projdir) outputs.upToDateWhen { file(projdir).exists() } } task jalviewjsTranspile(type: Exec) { dependsOn jalviewjsCreateJ2sSettings dependsOn jalviewjsProjectImport dependsOn jalviewjsEclipsePaths executable(eclipseBinary) args(["-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.jdt.apt.core.aptBuild", "-data", eclipseWorkspace, "-"+jalviewjs_eclipseBuildArg, eclipse_project_name ]) def stdout def stderr doFirst { stdout = new ByteArrayOutputStream() stderr = new ByteArrayOutputStream() standardOutput = new org.apache.tools.ant.util.TeeOutputStream(new FileOutputStream("${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}"), stdout); errorOutput = new org.apache.tools.ant.util.TeeOutputStream(new FileOutputStream("${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}"), stderr); } doLast { if (stdout.toString().contains("Error processing ")) { // j2s did not complete transpile throw new GradleException("Error during transpilation:\n${stderr}\nSee eclipse transpile log files '${jalviewjsBuildDir}/${jalviewjs_j2s_stdout}' and '${jalviewjsBuildDir}/${jalviewjs_j2s_stderr}'\n") } } inputs.dir(sourceDir) outputs.dir(eclipse_bin_dir+"/main") outputs.files( fileTree( dir: jalviewjsSiteDir+"/"+jalviewjs_j2s_subdir, includes: [ "**/*.js" ], excludes: [ //jalviewjsSiteDir+"/"+jalviewjs_j2s_subdir+"/intervalstore/**", //jalviewjsSiteDir+"/"+jalviewjs_j2s_subdir+"/org/json/**", "intervalstore/**", "org/json/**", ] ).files ) outputs.file(jalviewjsSiteDir+jalviewjs_server_resource) } jalviewjsUnzipFiles.mustRunAfter jalviewjsTranspile jalviewjsTranspile.mustRunAfter jalviewjsCopyResources jalviewjsTranspile.mustRunAfter jalviewjsCopySiteResources task jalviewjsPrepareSite { group "JalviewJS" description "Prepares the website folder including unzipping files and copying resources" dependsOn jalviewjsSitePath dependsOn jalviewjsUnzipFiles dependsOn jalviewjsCopyResources dependsOn jalviewjsCopySiteResources } task jalviewjsBuildSite { group "JalviewJS" description "Builds the whole website including transpiled code" dependsOn jalviewjsPrepareSite dependsOn jalviewjsTranspile } task jalviewjsSiteTar(type: Tar) { group "JalviewJS" description "Creates a tar.gz file for the website" dependsOn jalviewjsBuildSite def outputFilename = "jalviewjs-site-${JALVIEW_VERSION}.tar.gz" try { archiveFileName = outputFilename } catch (Exception e) { archiveName = outputFilename } compression Compression.GZIP from jalviewjsSiteDir into jalviewjs_site_dir // this is inside the tar file inputs.dir(jalviewjsSiteDir) } def jalviewjsServer = null task jalviewjsServerStart { group "JalviewJS" description "Starts a webserver on localhost to test the website" dependsOn jalviewjsSitePath doLast { if (jalviewjsServer != null) { println("SERVER ALREADY RUNNING. Go to "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+" . Run gradle jalviewjsServerStop to stop.") } else { SimpleHttpFileServerFactory factory = new SimpleHttpFileServerFactory() def port = Integer.valueOf(jalviewjs_server_port) def start = port def running = false while(port < start+1000 && !running) { try { def doc_root = new File(jalviewDirAbsolutePath +"/"+ jalviewjsSiteDir) jalviewjsServer = factory.start(doc_root, port) running = true println("SERVER STARTED with document root ${doc_root}.\nGo to "+jalviewjsServer.getResourceUrl(jalviewjs_server_resource)+" . Run gradle --stop to stop (kills all gradle daemons).") //println("Ctrl-c to stop.");java.lang.Thread.sleep(Integer.valueOf(jalviewjs_server_wait)*1000); } catch (Exception e) { port++; } } } } } /* server persists in gradle daemon but reference is not accessible across builds task jalviewjsServerStop { doLast { if (jalviewjsServer != null) { println("SERVER ON PORT "+jalviewjsServer.getPort()+" STOPPING. Run gradle jalviewjsServerStart to start again.") jalviewjsServer.stop() } else { println("SERVER NOT RUNNING. Run gradle jalviewjsServerStart to start.") } } } */ task ideBuildSite { dependsOn jalviewjsSitePath dependsOn jalviewjsUnzipFiles dependsOn jalviewjsCopyResources dependsOn jalviewjsCopySiteResources /* see project.afterEvaluate dependsOn ideJalviewjsBuild */ } task jalviewjs { if (useIde) { dependsOn ideBuildSite } else { dependsOn jalviewjsBuildSite } } project.afterEvaluate { tasks.findByName('eclipse').dependsOn tasks.findByName('jalviewjsCreateJ2sSettings') if (useIde) { tasks.findByName('ideJalviewjsImport').dependsOn eclipseProject tasks.findByName('ideJalviewjsImport').dependsOn eclipseClasspath tasks.findByName('ideJalviewjsImport').dependsOn eclipseJdt tasks.findByName('ideJalviewjsImport').dependsOn jalviewjsSetEclipseWorkspace tasks.findByName('ideJalviewjsBuild').dependsOn tasks.findByName('ideJalviewjsImport') tasks.findByName('ideJalviewjsBuild').dependsOn tasks.findByName('jalviewjsCreateJ2sSettings') tasks.findByName('ide').dependsOn eclipseProject tasks.findByName('ide').dependsOn eclipseClasspath tasks.findByName('ide').dependsOn eclipseJdt ideBuildSite.dependsOn tasks.findByName('ideJalviewjsBuild') } }