diff --git a/.travis.yml b/.travis.yml index d4bfe6665a..4f48fecd23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -134,6 +134,11 @@ script: fi # test skin generation tool - ./gradlew -u -i -S skinGenerate -DskinName=travis + # test deploy on customized webapps directory + - ./gradlew -u -i -S tomcatInstall -Dserver.webapps=.gradle/webapps + - ./gradlew -u -i -S tomcatStart -Dserver.webapps=.gradle/webapps + - ./gradlew -u -i -S tomcatStop -Dserver.webapps=.gradle/webapps + - ./gradlew -u -i -S tomcatClearLogs -Dserver.webapps=.gradle/webapps cache: directories: diff --git a/build.properties.sample b/build.properties.sample index 8770c90e27..0a41a4ac6b 100644 --- a/build.properties.sample +++ b/build.properties.sample @@ -41,6 +41,12 @@ # #server.base= +# (Optional) Webapps directory on which uPortal and portlets apps are deployed. +# This property permit to deploy all apps on a customized directory. +# Default value is on ${server.base}/webapps +# +#server.webapps= + # Location of Base Data Set; base data is imported before entities specified # in implementation.entities.location (below) and does not commonly require # adopter customization. diff --git a/buildSrc/src/main/groovy/org/apereo/portal/start/gradle/plugins/GradleTomcatDeployPlugin.groovy b/buildSrc/src/main/groovy/org/apereo/portal/start/gradle/plugins/GradleTomcatDeployPlugin.groovy index cd7b4cf141..f1f34d6ed3 100644 --- a/buildSrc/src/main/groovy/org/apereo/portal/start/gradle/plugins/GradleTomcatDeployPlugin.groovy +++ b/buildSrc/src/main/groovy/org/apereo/portal/start/gradle/plugins/GradleTomcatDeployPlugin.groovy @@ -14,8 +14,8 @@ class GradleTomcatDeployPlugin implements Plugin { mustRunAfter project.rootProject.tasks.tomcatInstall doFirst { - File serverBase = project.rootProject.file(project.rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = project.rootProject.file(project.rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") logger.lifecycle("Removing deployed application from servlet container at location: ${deployDir}") delete deployDir } @@ -27,8 +27,8 @@ class GradleTomcatDeployPlugin implements Plugin { dependsOn 'assemble' doFirst { - File serverBase = project.rootProject.file(project.rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = project.rootProject.file(project.rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") logger.lifecycle("Deploying assembled application to servlet container at location: ${deployDir}") String artifactDir = project.plugins.hasPlugin(GradlePlutoPlugin) ? 'pluto' : 'libs' diff --git a/buildSrc/src/main/groovy/org/apereo/portal/start/shell/PortalShellInvoker.groovy b/buildSrc/src/main/groovy/org/apereo/portal/start/shell/PortalShellInvoker.groovy index 3b3c8a7339..15497d55bb 100644 --- a/buildSrc/src/main/groovy/org/apereo/portal/start/shell/PortalShellInvoker.groovy +++ b/buildSrc/src/main/groovy/org/apereo/portal/start/shell/PortalShellInvoker.groovy @@ -9,8 +9,8 @@ import org.gradle.api.Project class PortalShellInvoker { void invoke(Project project, String scriptLocation, String... args) { - File serverBase = project.rootProject.file(project.rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = project.rootProject.file(project.rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") project.ant.setLifecycleLogLevel('INFO') project.ant.java(fork: true, failonerror: true, dir: project.rootProject.projectDir, classname: 'org.apereo.portal.shell.PortalShell') { diff --git a/buildSrc/src/main/resources/buildDefaults.properties b/buildSrc/src/main/resources/buildDefaults.properties index 4b0de3d884..9081f1c773 100644 --- a/buildSrc/src/main/resources/buildDefaults.properties +++ b/buildSrc/src/main/resources/buildDefaults.properties @@ -38,6 +38,12 @@ server.home=.gradle/tomcat # #server.base=.gradle/tomcat +# (Optional) Webapps directory on which uPortal and portlets apps are deployed. +# This property permit to deploy all apps on a customized directory. +# Default value is on ${server.base}/webapps +# +#server.webapps= + # Location of Base Data Set; base data is imported before entities specified # in implementation.entities.location (below) and does not commonly require # adopter customization. diff --git a/gradle/tasks/portlet.gradle b/gradle/tasks/portlet.gradle index 70502011f6..8523773083 100644 --- a/gradle/tasks/portlet.gradle +++ b/gradle/tasks/portlet.gradle @@ -23,8 +23,8 @@ task deployPortletApp() { destinationDir.mkdir() File archiveOutput = new File(destinationDir, warfile.getName()) - File serverBase = file(project.rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File(serverBase, "webapps/${FilenameUtils.removeExtension(warfile.getName())}") + File serverWebapps = file(project.rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File(serverWebapps, "${FilenameUtils.removeExtension(warfile.getName())}") logger.lifecycle("Deploying portlet application ${warfile} to location ${deployDir}") AssemblerConfig config = new AssemblerConfig() diff --git a/gradle/tasks/properties.gradle b/gradle/tasks/properties.gradle index 1d8e300b03..29beb59544 100644 --- a/gradle/tasks/properties.gradle +++ b/gradle/tasks/properties.gradle @@ -1,5 +1,3 @@ -import java.nio.file.Paths - /* * Allows a collection of Java versions to be supported. * If the currect Java version is unsupported, it will stop the current task execution. @@ -115,6 +113,15 @@ task portalProperties() { buildProperties.setProperty('portal.home', portalHome) } + /* + * Step Seven: Calculate server.webapps (if absent) + */ + if (!buildProperties.containsKey('server.webapps')) { + // Still need to check for a JVM argument... + String serverWebapps = System.getProperty('server.webapps') ?: "${buildProperties.getProperty('server.base')}/webapps" + buildProperties.setProperty('server.webapps', serverWebapps) + } + /* * List the complete set of build properties to the console. */ diff --git a/gradle/tasks/tomcat.gradle b/gradle/tasks/tomcat.gradle index 38903c1116..ab7bcbbfb6 100644 --- a/gradle/tasks/tomcat.gradle +++ b/gradle/tasks/tomcat.gradle @@ -190,12 +190,27 @@ task tomcatZip { doLast { String serverBase = rootProject.ext.buildProperties.getProperty('server.base') - ant.zip(destfile: 'tomcat-uportal.zip') { - zipfileset ( - dir: "${serverBase}", - prefix: 'tomcat', - excludes: 'logs/**/*, temp/**/*, work/**/*' - ) + String serverWebapps = rootProject.ext.buildProperties.getProperty('server.webapps') + if (serverWebapps.startsWith(serverBase)) { + ant.zip(destfile: 'tomcat-uportal.zip') { + zipfileset ( + dir: "${serverBase}", + prefix: 'tomcat', + excludes: 'logs/**/*, temp/**/*, work/**/*' + ) + } + } else { + ant.zip(destfile: 'tomcat-uportal.zip') { + zipfileset( + dir: "${serverBase}", + prefix: 'tomcat', + excludes: 'logs/**/*, temp/**/*, work/**/*' + ) + zipfileset( + dir: "${serverWebapps}", + prefix: 'webapps' + ) + } } } } @@ -209,12 +224,27 @@ task tomcatTar { doLast { String serverBase = rootProject.ext.buildProperties.getProperty('server.base') - ant.tar(destfile: 'tomcat-uportal.tgz', compression: 'gzip', longfile: 'gnu') { - tarfileset ( - dir: "${serverBase}", - prefix: 'tomcat', - excludes: 'logs/**/*, temp/**/*, work/**/*' - ) + String serverWebapps = rootProject.ext.buildProperties.getProperty('server.webapps') + if (serverWebapps.startsWith(serverBase)) { + ant.tar(destfile: 'tomcat-uportal.tgz', compression: 'gzip', longfile: 'gnu') { + tarfileset ( + dir: "${serverBase}", + prefix: 'tomcat', + excludes: 'logs/**/*, temp/**/*, work/**/*' + ) + } + } else { + ant.tar(destfile: 'tomcat-uportal.tgz', compression: 'gzip', longfile: 'gnu') { + tarfileset ( + dir: "${serverBase}", + prefix: 'tomcat', + excludes: 'logs/**/*, temp/**/*, work/**/*' + ) + tarfileset ( + dir: "${serverWebapps}", + prefix: 'webapps' + ) + } } } } diff --git a/overlays/Announcements/build.gradle b/overlays/Announcements/build.gradle index c946d400c7..f4f74d36e9 100644 --- a/overlays/Announcements/build.gradle +++ b/overlays/Announcements/build.gradle @@ -48,8 +48,8 @@ dataInit { * Drop (if present) then create the Hibernate-managed schema. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") ant.setLifecycleLogLevel('INFO') ant.java(fork: true, failonerror: true, dir: rootProject.projectDir, classname: 'org.jasig.portlet.announcements.SchemaCreator') { @@ -69,8 +69,8 @@ dataInit { * specified by 'implementation.entities.location'. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") String implementationEntitiesLocation = PortalShellInvoker.createGroovySafePath(rootProject.ext['buildProperties'].getProperty('implementation.entities.location')) ant.setLifecycleLogLevel('INFO') diff --git a/overlays/CalendarPortlet/build.gradle b/overlays/CalendarPortlet/build.gradle index ed45494651..41a10b0c3a 100644 --- a/overlays/CalendarPortlet/build.gradle +++ b/overlays/CalendarPortlet/build.gradle @@ -48,8 +48,8 @@ dataInit { * Drop (if present) then create the Hibernate-managed schema. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") /* * The following specifies failonerror=false because it will produce an exception like... @@ -81,8 +81,8 @@ dataInit { * specified by 'implementation.entities.location'. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") String implementationEntitiesLocation = PortalShellInvoker.createGroovySafePath(rootProject.ext['buildProperties'].getProperty('implementation.entities.location')) ant.setLifecycleLogLevel('INFO') diff --git a/overlays/NewsReaderPortlet/build.gradle b/overlays/NewsReaderPortlet/build.gradle index 15d2537026..7bb3f0df76 100644 --- a/overlays/NewsReaderPortlet/build.gradle +++ b/overlays/NewsReaderPortlet/build.gradle @@ -47,8 +47,8 @@ dataInit { * Drop (if present) then create the Hibernate-managed schema. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") /* * The following specifies failonerror=false because it will produce an exception like... @@ -80,8 +80,8 @@ dataInit { * specified by 'implementation.entities.location'. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") String implementationEntitiesLocation = PortalShellInvoker.createGroovySafePath(rootProject.ext['buildProperties'].getProperty('implementation.entities.location')) ant.setLifecycleLogLevel('INFO') diff --git a/overlays/SimpleContentPortlet/build.gradle b/overlays/SimpleContentPortlet/build.gradle index f70bc2362e..4b4488d7b4 100644 --- a/overlays/SimpleContentPortlet/build.gradle +++ b/overlays/SimpleContentPortlet/build.gradle @@ -33,9 +33,6 @@ war { /* * Import/Export Support */ - -import org.apereo.portal.start.shell.PortalShellInvoker - dependencies { impexp configurations.jdbc impexp "${portletApiDependency}" @@ -47,8 +44,8 @@ dataInit { * Drop (if present) then create the Hibernate-managed schema. */ doLast { - File serverBase = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.base')) - File deployDir = new File (serverBase, "webapps/${project.name}") + File serverWebapps = rootProject.file(rootProject.ext['buildProperties'].getProperty('server.webapps')) + File deployDir = new File (serverWebapps, "${project.name}") ant.setLifecycleLogLevel('INFO') ant.java(fork: true, failonerror: true, dir: rootProject.projectDir, classname: 'org.jasig.portlet.attachment.util.SchemaCreator') {