mirror of
https://github.com/Alfresco/alfresco-sdk.git
synced 2025-08-14 17:59:13 +00:00
Initial attempt at a JAR runner mojo
This commit is contained in:
@@ -0,0 +1,364 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (C) 2015 Alfresco Software Limited.
|
||||||
|
* <p/>
|
||||||
|
* This file is part of the Alfresco SDK.
|
||||||
|
* <p/>
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
* <p/>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p/>
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.alfresco.maven.plugin;
|
||||||
|
|
||||||
|
import org.apache.maven.execution.MavenSession;
|
||||||
|
import org.apache.maven.model.Dependency;
|
||||||
|
import org.apache.maven.model.Plugin;
|
||||||
|
import org.apache.maven.plugin.AbstractMojo;
|
||||||
|
import org.apache.maven.plugin.BuildPluginManager;
|
||||||
|
import org.apache.maven.plugin.MojoExecutionException;
|
||||||
|
import org.apache.maven.plugins.annotations.Parameter;
|
||||||
|
import org.apache.maven.plugins.annotations.Component;
|
||||||
|
import org.apache.maven.plugins.annotations.LifecyclePhase;
|
||||||
|
import org.apache.maven.plugins.annotations.Mojo;
|
||||||
|
import org.apache.maven.plugins.annotations.ResolutionScope;
|
||||||
|
import org.apache.maven.project.MavenProject;
|
||||||
|
import org.twdata.maven.mojoexecutor.MojoExecutor;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
import static org.twdata.maven.mojoexecutor.MojoExecutor.*;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Mojo( name = "run", defaultPhase = LifecyclePhase.PROCESS_SOURCES, requiresDependencyResolution = ResolutionScope.TEST)
|
||||||
|
public class RunMojo extends AbstractMojo
|
||||||
|
{
|
||||||
|
@Component
|
||||||
|
protected MavenProject project;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
protected MavenSession session;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
private BuildPluginManager pluginManager;
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.enableSolr", defaultValue = "true")
|
||||||
|
protected boolean enableSolr;
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.solrHome", defaultValue = "${project.basedir}/${alfresco.data.location}/solr")
|
||||||
|
protected String solrHome;
|
||||||
|
|
||||||
|
@Parameter(property = "alfresco.version", defaultValue = "5.1-a-EA")
|
||||||
|
protected String alfrescoVersion;
|
||||||
|
|
||||||
|
@Parameter(property = "alfresco.groupId", defaultValue = "org.alfresco")
|
||||||
|
protected String alfrescoGroupId;
|
||||||
|
|
||||||
|
@Parameter(property = "alfresco.db.url", defaultValue = "jdbc:h2:./${alfresco.data.location}/h2_data/${alfresco.db.name};${alfresco.db.params}")
|
||||||
|
protected String alfrescoDbUrl;
|
||||||
|
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.enableH2", defaultValue = "true")
|
||||||
|
protected boolean enableH2;
|
||||||
|
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.enableRepository", defaultValue = "true")
|
||||||
|
protected boolean enableRepository;
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.enableShare", defaultValue = "true")
|
||||||
|
protected boolean enableShare;
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.enableTestProperties", defaultValue = "true")
|
||||||
|
protected boolean enableTestProperties;
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.enableTomcat", defaultValue = "true")
|
||||||
|
protected boolean enableTomcat;
|
||||||
|
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.testFolder", defaultValue = "src/test/properties/${env}")
|
||||||
|
protected String testFolder;
|
||||||
|
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.testInclude", defaultValue = "**")
|
||||||
|
protected String testInclude;
|
||||||
|
|
||||||
|
@Parameter(property = "maven.alfresco.pgsqlDialectFolder", defaultValue = "${project.build.directory}/pg-dialect-tmp")
|
||||||
|
protected String pgsqlDialectFolder;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private ExecutionEnvironment execEnv;
|
||||||
|
|
||||||
|
public void execute() throws MojoExecutionException {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
execEnv = executionEnvironment(
|
||||||
|
project,
|
||||||
|
session,
|
||||||
|
pluginManager
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
if (enableH2) {
|
||||||
|
unpackH2Config();
|
||||||
|
copyH2Config();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableSolr) {
|
||||||
|
unpackSolrConfig();
|
||||||
|
replaceSolrConfigProperties();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableTestProperties) {
|
||||||
|
copyAlfrescoGlobalProperties();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableTomcat) {
|
||||||
|
startTomcat();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void unpackSolrConfig() throws MojoExecutionException {
|
||||||
|
getLog().info("Unpacking Solr config");
|
||||||
|
executeMojo(
|
||||||
|
plugin(
|
||||||
|
groupId("org.apache.maven.plugins"),
|
||||||
|
artifactId("maven-dependency-plugin"),
|
||||||
|
version("2.9")
|
||||||
|
),
|
||||||
|
goal("unpack"),
|
||||||
|
configuration(
|
||||||
|
element(name("outputDirectory"), solrHome),
|
||||||
|
element(name("artifactItems"),
|
||||||
|
element(name("artifactItem"),
|
||||||
|
element(name("groupId"), alfrescoGroupId),
|
||||||
|
element(name("artifactId"), "alfresco-solr4"),
|
||||||
|
element(name("version"), alfrescoVersion),
|
||||||
|
element(name("classifier"), "config"),
|
||||||
|
element(name("type"), "zip")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
execEnv
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void replaceSolrConfigProperties() throws MojoExecutionException {
|
||||||
|
getLog().info("Replacing Solr config properties");
|
||||||
|
executeMojo(
|
||||||
|
plugin(
|
||||||
|
groupId("com.google.code.maven-replacer-plugin"),
|
||||||
|
artifactId("replacer"),
|
||||||
|
version("1.5.3")
|
||||||
|
),
|
||||||
|
goal("replace"),
|
||||||
|
configuration(
|
||||||
|
element(name("regex"), "false"),
|
||||||
|
element(name("includes"),
|
||||||
|
element(name("include"), solrHome + "/archive-SpacesStore/conf/solrcore.properties" ),
|
||||||
|
element(name("include"), solrHome + "/workspace-SpacesStore/conf/solrcore.properties")
|
||||||
|
),
|
||||||
|
element(name("replacements"),
|
||||||
|
element(name("replacement"),
|
||||||
|
element(name("token"), "@@ALFRESCO_SOLR4_DATA_DIR@@"),
|
||||||
|
element(name("value"), solrHome + "/index")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
execEnv
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// @TODO We don't need this anymore! As per https://issues.alfresco.com/jira/browse/ACE-4563 we will get an
|
||||||
|
// alfresco-repository artifact with h2scripts classifier which we simply slap in the Tomcat classpath
|
||||||
|
// and we're good!
|
||||||
|
protected void unpackH2Config() throws MojoExecutionException {
|
||||||
|
// @TODO Check if H2 is enabled, if not no need to do this step
|
||||||
|
|
||||||
|
getLog().info("Unpacking H2 config");
|
||||||
|
executeMojo(
|
||||||
|
plugin(
|
||||||
|
groupId("org.apache.maven.plugins"),
|
||||||
|
artifactId("maven-dependency-plugin"),
|
||||||
|
version("2.9")
|
||||||
|
),
|
||||||
|
goal("unpack"),
|
||||||
|
configuration(
|
||||||
|
element(name("outputDirectory"), pgsqlDialectFolder),
|
||||||
|
element(name("artifactItems"),
|
||||||
|
element(name("artifactItem"),
|
||||||
|
element(name("groupId"), alfrescoGroupId),
|
||||||
|
element(name("artifactId"), "alfresco-repository"),
|
||||||
|
element(name("version"), alfrescoVersion),
|
||||||
|
element(name("includes"), "alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect/*,alfresco/dbscripts/upgrade/*/org.hibernate.dialect.PostgreSQLDialect/*,alfresco/ibatis/org.hibernate.dialect.PostgreSQLDialect/*")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
execEnv
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void copyH2Config() throws MojoExecutionException {
|
||||||
|
// @TODO Check if H2 is enabled, if not no need to do this step
|
||||||
|
getLog().info("Extracting H2 Dialect");
|
||||||
|
executeMojo(
|
||||||
|
plugin(
|
||||||
|
groupId("org.apache.maven.plugins"),
|
||||||
|
artifactId("maven-resources-plugin"),
|
||||||
|
version("2.7")
|
||||||
|
),
|
||||||
|
goal("copy-resources"),
|
||||||
|
configuration(
|
||||||
|
element(name("outputDirectory"), "${project.build.testOutputDirectory}"),
|
||||||
|
element(name("resources"),
|
||||||
|
element(name("resource"),
|
||||||
|
element(name("directory"), pgsqlDialectFolder + "/alfresco/dbscripts/create/org.hibernate.dialect.PostgreSQLDialect"),
|
||||||
|
element(name("includes"),
|
||||||
|
element(name("include"), "*")
|
||||||
|
),
|
||||||
|
element(name("targetPath"), "alfresco/dbscripts/create/org.hibernate.dialect.H2Dialect")
|
||||||
|
),
|
||||||
|
element(name("resource"),
|
||||||
|
element(name("directory"), pgsqlDialectFolder + "/alfresco/ibatis/org.hibernate.dialect.PostgreSQLDialect"),
|
||||||
|
element(name("includes"),
|
||||||
|
element(name("include"), "*")
|
||||||
|
),
|
||||||
|
element(name("targetPath"), "alfresco/ibatis/org.hibernate.dialect.H2Dialect")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
execEnv
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void copyAlfrescoGlobalProperties() throws MojoExecutionException {
|
||||||
|
getLog().info("Copying alfresco-global.properties to test resources");
|
||||||
|
executeMojo(
|
||||||
|
plugin(
|
||||||
|
groupId("org.apache.maven.plugins"),
|
||||||
|
artifactId("maven-resources-plugin"),
|
||||||
|
version("2.7")
|
||||||
|
),
|
||||||
|
goal("copy-resources"),
|
||||||
|
configuration(
|
||||||
|
element(name("outputDirectory"), "${project.build.testOutputDirectory}"),
|
||||||
|
element(name("resources"),
|
||||||
|
element(name("resource"),
|
||||||
|
element(name("directory"), testFolder),
|
||||||
|
element(name("includes"),
|
||||||
|
element(name("include"), testInclude)
|
||||||
|
),
|
||||||
|
element(name("filtering"), "true")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
execEnv
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void startTomcat() throws MojoExecutionException {
|
||||||
|
getLog().info("Starting Tomcat");
|
||||||
|
|
||||||
|
List<Dependency> tomcatDependencies = null;
|
||||||
|
Element solrElement = null;
|
||||||
|
Element repoElement = null;
|
||||||
|
Element shareElement = null;
|
||||||
|
ArrayList tmpWebapps = new ArrayList<Element>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (enableH2) {
|
||||||
|
tomcatDependencies = dependencies(
|
||||||
|
dependency("com.h2database", "h2", "1.4.190"),
|
||||||
|
dependency("org.codehaus.plexus", "plexus-archiver", "2.3")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableSolr) {
|
||||||
|
solrElement = element(name("webapp"),
|
||||||
|
element(name("groupId"), alfrescoGroupId),
|
||||||
|
element(name("artifactId"), "alfresco-solr4"),
|
||||||
|
element(name("version"), alfrescoVersion),
|
||||||
|
element(name("type"), "war"),
|
||||||
|
element(name("asWebapp"), "true"),
|
||||||
|
element(name("contextPath"), "/solr4"),
|
||||||
|
element(name("contextFile"), "${project.build.directory}/context-solr.xml")
|
||||||
|
);
|
||||||
|
tmpWebapps.add(solrElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enableRepository) {
|
||||||
|
repoElement = element(name("webapp"),
|
||||||
|
element(name("groupId"), alfrescoGroupId),
|
||||||
|
element(name("artifactId"), "${alfresco.repo.artifactId}"),
|
||||||
|
element(name("version"), alfrescoVersion),
|
||||||
|
element(name("type"), "war"),
|
||||||
|
element(name("asWebapp"), "true"),
|
||||||
|
element(name("contextFile"), "${project.build.directory}/context-repo.xml")
|
||||||
|
);
|
||||||
|
tmpWebapps.add( repoElement );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (enableShare) {
|
||||||
|
shareElement = element(name("webapp"),
|
||||||
|
element(name("groupId"), alfrescoGroupId),
|
||||||
|
element(name("artifactId"), "${alfresco.share.artifactId}"),
|
||||||
|
element(name("version"), alfrescoVersion),
|
||||||
|
element(name("type"), "war"),
|
||||||
|
element(name("asWebapp"), "true"),
|
||||||
|
element(name("contextFile"), "${project.build.directory}/context-share.xml")
|
||||||
|
);
|
||||||
|
tmpWebapps.add( shareElement );
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// This might be ugly, the MojoExecuter will only accept Element[] and we need this list to be dynamic
|
||||||
|
// to avoid NPEs. If there's a prettier way to do the above please feel free to change it!
|
||||||
|
Element[] webapps = new Element[tmpWebapps.size()];
|
||||||
|
tmpWebapps.toArray(webapps);
|
||||||
|
|
||||||
|
executeMojo(
|
||||||
|
plugin(
|
||||||
|
groupId("org.apache.tomcat.maven"),
|
||||||
|
artifactId("tomcat7-maven-plugin"),
|
||||||
|
version("2.2"),
|
||||||
|
tomcatDependencies
|
||||||
|
),
|
||||||
|
goal("run"),
|
||||||
|
configuration(
|
||||||
|
element(name("ignorePackaging"), "true"),
|
||||||
|
element(name("useSeparateTomcatClassLoader"), "true"),
|
||||||
|
element(name("useTestClasspath"), "true"),
|
||||||
|
element(name("systemProperties"),
|
||||||
|
element(name("java.io.tmpdir"), "${project.build.directory}")
|
||||||
|
),
|
||||||
|
element(name("delegate"), "false"),
|
||||||
|
|
||||||
|
element(name("webapps"), webapps)
|
||||||
|
|
||||||
|
),
|
||||||
|
execEnv
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user