From 4fca9989fde3d80a927575aa1a85d36c989a9f96 Mon Sep 17 00:00:00 2001 From: Martin Bergljung Date: Wed, 6 Jul 2016 16:46:11 +0100 Subject: [PATCH] Added support for running version 5.0.x --- .../org/alfresco/maven/plugin/RunMojo.java | 138 +++++++++++++++--- 1 file changed, 116 insertions(+), 22 deletions(-) diff --git a/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java b/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java index d1c3ee4b..671be9a7 100644 --- a/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java +++ b/plugins/alfresco-maven-plugin/src/main/java/org/alfresco/maven/plugin/RunMojo.java @@ -42,7 +42,7 @@ import static org.twdata.maven.mojoexecutor.MojoExecutor.*; * @version 1.0 * @since 3.0.0 */ -@Mojo( name = "run", +@Mojo(name = "run", defaultPhase = LifecyclePhase.TEST, aggregator = true, requiresDependencyResolution = ResolutionScope.TEST) @@ -55,6 +55,9 @@ public class RunMojo extends AbstractMojo { public static final String MAVEN_TOMCAT7_PLUGIN_VERSION = "2.2"; public static final String MAVEN_ALFRESCO_PLUGIN_VERSION = "3.0.0-SNAPSHOT"; + public static final String PLATFORM_WAR_PREFIX_NAME = "platform"; + public static final String SHARE_WAR_PREFIX_NAME = "share"; + @Component protected MavenProject project; @@ -207,7 +210,7 @@ public class RunMojo extends AbstractMojo { * TODO: Is this parameter needed here? */ // @Parameter(property = "alfresco.db.url", defaultValue = "jdbc:h2:./${alfresco.data.location}/h2_data/${alfresco.db.name};${alfresco.db.params}") - // protected String alfrescoDbUrl; + // protected String alfrescoDbUrl; /** * The Maven environment that this mojo is executed in @@ -307,6 +310,51 @@ public class RunMojo extends AbstractMojo { ); } + /** + * Replaces web.xml where applicable in platform webapp (alfresco.war), + * commenting out the security-constraints. + *

+ * This is only needed for 5.0 (5.1 handles it automatically when turning off ssl via props) + * + * @throws MojoExecutionException + */ + protected void commentOutSecureCommsInPlatformWebXml() throws MojoExecutionException { + if (isPlatformVersionGtOrEqTo51()) { + return; + } + + String webInfPath = getWarOutputDir(PLATFORM_WAR_PREFIX_NAME) + "/WEB-INF/"; + String webXmlFilePath = webInfPath + "web.xml"; + + getLog().info("Commenting out the security-constraints in " + webXmlFilePath); + + executeMojo( + plugin( + groupId("com.google.code.maven-replacer-plugin"), + artifactId("replacer"), + version(MAVEN_REPLACER_PLUGIN_VERSION) + ), + goal("replace"), + configuration( + element(name("ignoreErrors"), "true"), + element(name("file"), webXmlFilePath), + element(name("outputDir"), webInfPath), + element(name("preserveDir"), "false"), + element(name("replacements"), + element(name("replacement"), + element(name("token"), ""), + element(name("value"), ""), + element(name("value"), " -->") + ) + ) + ), + execEnv + ); + } + /** * Copy the alfresco-global.properties file that will be used when * running Alfresco. It contains database connection parameters and @@ -342,13 +390,15 @@ public class RunMojo extends AbstractMojo { /** * Build the customized Platform webapp (i.e. the Repository, alfresco.war) * that should be deployed by Tomcat by applying all AMPs and JARs from - * the {@code } configuration. + * the {@code } configuration. */ protected void buildPlatformWar() throws MojoExecutionException { - String platformWarArtifactId = buildCustomWar("platform", - platformModules, - alfrescoPlatformWarArtifactId, - alfrescoPlatformVersion); + buildCustomWar(PLATFORM_WAR_PREFIX_NAME, platformModules, + alfrescoPlatformWarArtifactId, alfrescoPlatformVersion); + + commentOutSecureCommsInPlatformWebXml(); + + String platformWarArtifactId = packageAndInstallCustomWar(PLATFORM_WAR_PREFIX_NAME); // Set up the custom platform war to be run by Tomcat plugin runnerAlfrescoGroupId = "${project.groupId}"; @@ -359,13 +409,12 @@ public class RunMojo extends AbstractMojo { /** * Build the customized Share webapp (i.e. the share.war) * that should be deployed by Tomcat by applying all AMPs and JARs from - * the {@code } configuration. + * the {@code } configuration. */ - protected void buildShareWar() throws MojoExecutionException { - String shareWarArtifactId = buildCustomWar("share", - shareModules, - alfrescoShareWarArtifactId, - alfrescoShareVersion); + protected void buildShareWar() throws MojoExecutionException { + buildCustomWar(SHARE_WAR_PREFIX_NAME, shareModules, alfrescoShareWarArtifactId, alfrescoShareVersion); + + String shareWarArtifactId = packageAndInstallCustomWar(SHARE_WAR_PREFIX_NAME); // Set up the custom share war to be run by Tomcat plugin runnerAlfrescoGroupId = "${project.groupId}"; @@ -376,19 +425,17 @@ public class RunMojo extends AbstractMojo { /** * Build a customized webapp, applying a number of AMPs and JARs from alfresco maven plugin configuration. * - * @param warName the name of the custom war - * @param modules the modules that should be applied to the custom war + * @param warName the name of the custom war + * @param modules the modules that should be applied to the custom war * @param originalWarArtifactId the artifactId for the original war file that should be customized - * @param originalWarVersion the version for the original war file that should be customized - * @return the customized war file artifactId, to be used by the tomcat7 plugin + * @param originalWarVersion the version for the original war file that should be customized * @throws MojoExecutionException */ - protected String buildCustomWar(String warName, + protected void buildCustomWar(String warName, List modules, String originalWarArtifactId, String originalWarVersion) throws MojoExecutionException { - final String warArtifactId = "${project.artifactId}-" + warName; - final String warOutputDir = "${project.build.directory}/" + warName + "-war"; + final String warOutputDir = getWarOutputDir(warName); final String ampsOutputDir = "${project.build.directory}/modules/" + warName + "/amps"; List ampModules = new ArrayList<>(); List jarModules = new ArrayList<>(); @@ -401,6 +448,15 @@ public class RunMojo extends AbstractMojo { element(name("version"), moduleDep.getVersion()), element(name("type"), moduleDep.getType()), element(name("overWrite"), "true")); + + if (moduleDep.getArtifactId().equalsIgnoreCase("alfresco-share-services")) { + // Skip if we are not running a 5.1 version of Alfresco, 'Alfresco Share Services' + // was not used in earlier versions + if (!isPlatformVersionGtOrEqTo51()) { + continue; + } + } + if (moduleDep.isAmp()) { ampModules.add(el); } else if (moduleDep.isJar()) { @@ -490,8 +546,20 @@ public class RunMojo extends AbstractMojo { execEnv ); } + } - // Build the customized war file + /** + * Package customized war file and install it in local maven repo. + * + * @param warName the name of the custom war + * @return the customized war file artifactId, to be used by the tomcat7 plugin + * @throws MojoExecutionException + */ + protected String packageAndInstallCustomWar(String warName) throws MojoExecutionException { + final String warArtifactId = "${project.artifactId}-" + warName; + final String warOutputDir = getWarOutputDir(warName); + + // Package the customized war file executeMojo( plugin( groupId("org.apache.maven.plugins"), @@ -710,7 +778,7 @@ public class RunMojo extends AbstractMojo { Element e; if (StringUtils.isNotBlank(contextFile)) { e = element(name("webapp"), - groupIdEl, artifactIdEl, versionEl,typeEl,asWebappEl, contextPathEl, + groupIdEl, artifactIdEl, versionEl, typeEl, asWebappEl, contextPathEl, element(name("contextFile"), contextFile)); } else { @@ -722,4 +790,30 @@ public class RunMojo extends AbstractMojo { return e; } + + /** + * Returns true if current platform version (i.e. version of alfresco.war) is + * >= 5.1 + * + * @return true if platform version >= 5.1 + */ + private boolean isPlatformVersionGtOrEqTo51() { + int versionNumber = Integer.parseInt( + alfrescoPlatformVersion.replaceAll("[^0-9]", "").substring(0, 2)); + if (versionNumber >= 51) { + return true; + } + + return false; + } + + /** + * The directory where the custom war will be assembled + * + * @param warName a war prefix, such as 'platform' or 'share' + * @return a directory such as: .../aio/target/platform-war + */ + private String getWarOutputDir(String warName) { + return "${project.build.directory}/" + warName + "-war"; + } }