Skip to content

Commit

Permalink
Adding option for installing and distributing importer
Browse files Browse the repository at this point in the history
  • Loading branch information
rgozim authored and jburel committed May 2, 2019
1 parent fcfb4d3 commit 57fffb2
Show file tree
Hide file tree
Showing 12 changed files with 74 additions and 36 deletions.
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
plugins {
id "java"
id "org.openmicroscopy.insight"
id "org.openmicroscopy.distribute"
id "org.openmicroscopy.publish"
id "org.openmicroscopy.distribute"
id "org.openmicroscopy.packager"
id "org.openmicroscopy.additional-repositories" version "5.5.0-SNAPSHOT"
}

Expand Down
4 changes: 4 additions & 0 deletions buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,9 @@ gradlePlugin {
id = "org.openmicroscopy.publish"
implementationClass = "org.openmicroscopy.PublishPlugin"
}
packager {
id = "org.openmicroscopy.packager"
implementationClass = "org.openmicroscopy.PackagerPlugin"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ import org.gradle.api.distribution.Distribution
import org.gradle.api.distribution.DistributionContainer
import org.gradle.api.distribution.plugins.DistributionPlugin
import org.gradle.api.file.CopySpec
import org.gradle.api.plugins.ApplicationPlugin
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.application.CreateStartScripts
Expand All @@ -56,8 +55,7 @@ class DistributePlugin implements Plugin<Project> {
void apply(Project project) {
this.project = project

project.pluginManager.apply(InsightBasePlugin)
project.pluginManager.apply(ApplicationPlugin)
project.pluginManager.apply(InsightPlugin)

// Add CreateStartScripts task for importer, much like what the ApplicationPlugin does for "main" distribution
addImporterCreateScriptsTask()
Expand Down Expand Up @@ -90,7 +88,7 @@ class DistributePlugin implements Plugin<Project> {
css.applicationName = "omero-importer"
css.outputDir = new File(project.getBuildDir(), "scripts")
css.executableDir = "bin"
configureStartScripts(css)
Utils.configureStartScripts(css)
}
})
}
Expand Down Expand Up @@ -154,13 +152,4 @@ class DistributePlugin implements Plugin<Project> {
return libSpec
}

static void configureStartScripts(CreateStartScripts css) {
css.defaultJvmOpts += ["-Duser.dir=MY_APP_HOME/"]
css.doLast { CreateStartScripts last ->
last.unixScript.text = last.unixScript.text.replace("MY_APP_HOME", "\$APP_HOME")
last.windowsScript.text = last.windowsScript.text.replace("MY_APP_HOME", "%~dp0..")
// Fix for https://github.com/gradle/gradle/issues/1989
last.windowsScript.text = last.windowsScript.text.replaceAll('set CLASSPATH=.*', 'set CLASSPATH=.;%APP_HOME%/lib/*')
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/
package org.openmicroscopy

import groovy.transform.CompileStatic
import org.gradle.api.Action
import org.gradle.api.Plugin
import org.gradle.api.Project
Expand All @@ -34,6 +35,7 @@ import org.gradle.jvm.tasks.Jar

import java.text.SimpleDateFormat

@CompileStatic
class InsightBasePlugin implements Plugin<Project> {

public static final String TASK_PROCESS_CONFIGS = "processConfigs"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ class InsightPlugin implements Plugin<Project> {
}

project.tasks.named(ApplicationPlugin.TASK_START_SCRIPTS_NAME, CreateStartScripts).configure {
DistributePlugin.configureStartScripts(it)
Utils.configureStartScripts(it)
}
}

Expand Down
65 changes: 44 additions & 21 deletions buildSrc/src/main/groovy/org/openmicroscopy/PackagerPlugin.groovy
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
/*
* -----------------------------------------------------------------------------
* Copyright (C) 2019 University of Dundee & Open Microscopy Environment.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* ------------------------------------------------------------------------------
*/
package org.openmicroscopy

import groovy.transform.CompileStatic
import org.gradle.api.Action
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.ApplicationPlugin
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.tasks.JavaExec
import org.gradle.api.tasks.Sync
import org.gradle.jvm.tasks.Jar
import org.openmicroscopy.extensions.InstallOptions
import org.openmicroscopy.extensions.InstallOptionsContainer
import org.openmicroscopy.extensions.implementation.DefaultInstallOptions

@CompileStatic
class PackagerPlugin implements Plugin<Project> {

private Project project
Expand All @@ -20,47 +40,50 @@ class PackagerPlugin implements Plugin<Project> {
void apply(Project project) {
this.project = project

project.pluginManager.apply(InsightPlugin)
project.pluginManager.apply(DistributePlugin)
project.pluginManager.apply(JavaPackagerPlugin)

InstallOptionsContainer installOptionsContainer =
project.extensions.getByName("deploy") as InstallOptionsContainer

// Configure main install options (insight)
InstallOptions main = installOptionsContainer.getByName(JavaPackagerPlugin.MAIN_DEPLOY_NAME)
main.exe {
it.icon = project.file("icons/omeroinsight.ico")
it.icon = project.file("icons/omeroInsight.ico")
}
main.dmg {
it.icon = project.file("icons/omeroinsight.icns")
it.icon = project.file("icons/omeroInsight.icns")
}

createImporterInstaller(installOptionsContainer)
}

private void createImporterInstaller(InstallOptionsContainer container) {
// Create install option for importer
container.create("importer", new Action<DefaultInstallOptions>() {
container.create("importer", new Action<InstallOptions>() {
@Override
void execute(DefaultInstallOptions importer) {
// Use the command line arguments from the 'run' task
def exec = project.tasks.getByName(TASK_RUN_IMPORTER) as JavaExec
importer.mainClassName.set(exec.main)
importer.arguments.set(exec.args)
importer.javaOptions.set(exec.jvmArgs)

// The mainJar is the archive created by the 'jar' task
void execute(InstallOptions importer) {
def exec = project.tasks.getByName(InsightPlugin.TASK_RUN_IMPORTER) as JavaExec
def jar = project.tasks.getByName(JavaPlugin.JAR_TASK_NAME) as Jar
importer.mainJar.set(jar.archiveFileName)
importer.applicationVersion.set(jar.archiveVersion)
def installDistTask = project.tasks.getByName(
"install${DistributePlugin.DISTRIBUTION_IMPORTER.capitalize()}Dist") as Sync

importer.outputTypes = ["dmg", "pkg", "exe", "msi"]

importer.mainClassName = exec.main
importer.arguments = exec.args
importer.javaOptions = exec.jvmArgs

// Use the files from the 'installDist' task
Sync installDistTask = project.tasks.getByName(DistributePlugin.DISTRIBUTION_IMPORTER) as Sync
importer.outputFile.set(project.layout.buildDirectory.file("packaged/${importer.name}/${installDistTask.destinationDir.name}"))
importer.applicationName.set(installDistTask.destinationDir.name)
importer.sourceDir.set(installDistTask.destinationDir)
importer.mainJar = jar.archiveFileName
importer.applicationVersion = jar.archiveVersion

importer.outputFile = "${project.buildDir}/packaged/${installDistTask.name}/${installDistTask.destinationDir.name}"
importer.applicationName = installDistTask.destinationDir.name
importer.sourceDir = installDistTask.destinationDir
importer.sourceFiles.from(project.fileTree(installDistTask.destinationDir).include("**/*.*"))
}
})
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/
package org.openmicroscopy

import groovy.transform.CompileStatic
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.XmlProvider
Expand All @@ -31,6 +32,7 @@ import org.gradle.api.publish.maven.MavenPomLicenseSpec
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.maven.plugins.MavenPublishPlugin

@CompileStatic
class PublishPlugin implements Plugin<Project> {

private Project project
Expand Down
17 changes: 17 additions & 0 deletions buildSrc/src/main/groovy/org/openmicroscopy/Utils.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,29 @@
*/
package org.openmicroscopy

import groovy.transform.CompileStatic
import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration
import org.gradle.api.plugins.JavaPlugin
import org.gradle.api.tasks.application.CreateStartScripts

@CompileStatic
class Utils {
static Configuration getRuntimeClasspathConfiguration(Project project) {
project.configurations.findByName(JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME)
}

/**
* Adds default start script settings applicable to insight and derivative distributions.
* @param css CreateStartScripts to configure
*/
static void configureStartScripts(CreateStartScripts css) {
css.defaultJvmOpts += ["-Duser.dir=MY_APP_HOME/"]
css.doLast { CreateStartScripts last ->
last.unixScript.text = last.unixScript.text.replace("MY_APP_HOME", "\$APP_HOME")
last.windowsScript.text = last.windowsScript.text.replace("MY_APP_HOME", "%~dp0..")
// Fix for https://github.com/gradle/gradle/issues/1989
last.windowsScript.text = last.windowsScript.text.replaceAll('set CLASSPATH=.*', 'set CLASSPATH=.;%APP_HOME%/lib/*')
}
}
}
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

0 comments on commit 57fffb2

Please sign in to comment.