diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-11 23:13:23 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-11-11 23:13:23 +0000 |
commit | 6d0e93c68d3aeaeb4bb6d96ac0460eec40ef786e (patch) | |
tree | a956ed510e14a5509b8ef49fae42cfd439629825 /branches/sca-java-M2/sca/plugins/plugin.war/src/main | |
parent | 3ac2d800d840f03618fc364090d786effde84b1f (diff) |
Moving 1.x branches
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@835143 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-java-M2/sca/plugins/plugin.war/src/main')
2 files changed, 0 insertions, 595 deletions
diff --git a/branches/sca-java-M2/sca/plugins/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java b/branches/sca-java-M2/sca/plugins/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java deleted file mode 100644 index 55183cf0a3..0000000000 --- a/branches/sca-java-M2/sca/plugins/plugin.war/src/main/java/org/apache/tuscany/plugin/war/Dependency.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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.apache.tuscany.plugin.war; - -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; - -/** - * Represents a configured tuscany dependency for boot and extension libraries. - * - * @version $Rev$ $Date$ - */ -public class Dependency { - - /** - * JAR type artifact. - */ - private static final String TYPE_JAR = "jar"; - - /** - * Default boot libraries. TODO Decide on whether to get snapshot version rather than hardcoded version.. - */ - private static final Dependency[] DEFAULT_BOOT_LIBS = new Dependency[] { new WebappHostDependency() }; - - /** - * Group Id that is injected in from configuration. - */ - private String groupId; - - /** - * Artifact Id that is injected in from configuration. - */ - private String artifactId; - - /** - * Version that is injected in from configuration. - */ - private String version; - - /** - * Default constructor. - * - */ - public Dependency() { - } - - /** - * Initializes the field. - * - * @param groupId - * Group id. - * @param artifactId - * Artifact id. - * @param version - * Artifact version. - */ - public Dependency(String groupId, String artifactId, String version) { - super(); - this.groupId = groupId; - this.artifactId = artifactId; - this.version = version; - } - - /** - * Gets the artifact using the specified artifact factory. - * - * @param artifactFactory - * Artifact factory to use. - * @return Artifact identified by the dependency. - */ - public Artifact getArtifact(ArtifactFactory artifactFactory) { - return artifactFactory.createArtifact(groupId, artifactId, version, Artifact.SCOPE_RUNTIME, TYPE_JAR); - } - - /** - * Returns the default boot libraries. - * - * @return Default boot libraries. - */ - public static Dependency[] getDefaultBootLibs() { - return DEFAULT_BOOT_LIBS; - } - - /** - * Checks whether the specified artifact has the same artifact id. - * - * @param artifact - * Artifact to be matched. - * @return True if the sepcified artifact has the same id. - */ - public boolean match(Artifact artifact) { - // TODO Auto-generated method stub - return artifact.getArtifactId().equals(artifactId); - } - - /** - * Webapp host depndency. - */ - private static class WebappHostDependency extends Dependency { - // TODO Decide on whether to get snapshot version rather than hardcoded version - private WebappHostDependency() { - super("org.apache.tuscany.sca.runtime", "webapp-host", "1.0-incubator-M2-SNAPSHOT"); - } - } - -} diff --git a/branches/sca-java-M2/sca/plugins/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java b/branches/sca-java-M2/sca/plugins/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java deleted file mode 100644 index 7d9e45b1ab..0000000000 --- a/branches/sca-java-M2/sca/plugins/plugin.war/src/main/java/org/apache/tuscany/plugin/war/TuscanyWarMojo.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * 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.apache.tuscany.plugin.war; - -import java.beans.XMLEncoder; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.jar.JarOutputStream; -import java.util.zip.ZipException; - -import org.apache.commons.io.IOUtils; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.metadata.ArtifactMetadataRetrievalException; -import org.apache.maven.artifact.metadata.ArtifactMetadataSource; -import org.apache.maven.artifact.metadata.ResolutionGroup; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.resolver.ArtifactNotFoundException; -import org.apache.maven.artifact.resolver.ArtifactResolutionException; -import org.apache.maven.artifact.resolver.ArtifactResolutionResult; -import org.apache.maven.artifact.resolver.ArtifactResolver; -import org.apache.maven.plugin.AbstractMojo; -import org.apache.maven.plugin.MojoExecutionException; - -/** - * Build the tuscany war file by adding the tuscany dependencies. - * - * Performs the following tasks. - * - * <ul> - * <li>Adds the boot dependencies transitively to WEB-INF/tuscany/boot</li> - * <li>By default boot libraries are transitively resolved from webapp-host</li> - * <li>The version of boot libraries can be specified using configuration/runTimeVersion element</li> - * <li>Boot libraries can be overridden using the configuration/bootLibs element in the plugin</li> - * <li>Adds the extension artifacts specified using configuration/extensions to WEB-INF/tuscany/extensions</li> - * <li>If configuration/loadExtensionsDependency is set to true extension dependencies are transitivel loaded</li> - * <li>Extension dependencies are loaded into WEB-INF/tuscany/repository directory in a Maven repo format</li> - * <li>Extension dependency metadata is written to WEB-INF/tuscany/repository/dependency.metadata file</li> - * </ul> - * @goal tuscany-war - * @phase package - * - * @version $Rev$ $Date$ - * - */ -public class TuscanyWarMojo extends AbstractMojo { - - /** - * Tuscany path. - */ - private static final String TUSCANY_PATH = "WEB-INF/tuscany/"; - - /** - * Tuscany boot path. - */ - private static final String BOOT_PATH = TUSCANY_PATH + "boot/"; - - /** - * Tuscany extension path. - */ - private static final String EXTENSION_PATH = TUSCANY_PATH + "extensions/"; - - /** - * Tuscany repository path. - */ - private static final String REPOSITORY_PATH = TUSCANY_PATH + "repository/"; - - /** - * Artifact metadata source. - * - * @component - */ - private ArtifactMetadataSource metadataSource; - - /** - * Used to look up Artifacts in the remote repository. - * - * @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}" - * @required - * @readonly - */ - private ArtifactFactory artifactFactory; - - /** - * Used to look up Artifacts in the remote repository. - * - * @parameter expression="${component.org.apache.maven.artifact.resolver.ArtifactResolver}" - * @required - * @readonly - */ - protected ArtifactResolver resolver; - - /** - * Location of the local repository. - * - * @parameter expression="${localRepository}" - * @readonly - * @required - */ - private ArtifactRepository localRepository; - - /** - * List of Remote Repositories used by the resolver - * - * @parameter expression="${project.remoteArtifactRepositories}" - * @readonly - * @required - */ - private List remoteRepositories; - - /** - * The directory for the generated WAR. - * - * @parameter expression="${project.build.directory}" - * @required - */ - private String outputDirectory; - - /** - * The directory for the generated WAR. - * - * @parameter - */ - private Dependency[] bootLibs = Dependency.getDefaultBootLibs(); - - /** - * The directory for the generated WAR. - * - * @parameter - */ - private Dependency[] extensions = new Dependency[0]; - - /** - * The name of the generated WAR. - * - * @parameter expression="${project.build.finalName}" - * @required - */ - private String warName; - - /** - * A flag to indicate whether extension dependencies should be resolved transitively. - * - * @parameter - */ - private boolean loadExtensionDependencies; - - /** - * The default version of boot dependany jar files - * - * @parameter - */ - private String runTimeVersion = null; - - /** - * WEB-INF jar files. - */ - private Set<String> packagedLibs = new HashSet<String>(); - - /** - * Transitive dependencies for extensions. - */ - private Map transDepenedencyMap = new HashMap(); - - /** - * Executes the MOJO. - */ - public void execute() throws MojoExecutionException { - - JarFile originalWar = null; - JarOutputStream newWar = null; - File originalWarFile = null; - File newWarFile = null; - - boolean success = false; - - try { - - // if there is a runtime version specified and no bootLib dependancies, - // modify the bootLibs to have the runtime version. - if (runTimeVersion != null && bootLibs == Dependency.getDefaultBootLibs()) { - Dependency dependancy = new Dependency("org.apache.tuscany.sca.runtime", - "webapp-host", runTimeVersion); - bootLibs = new Dependency[] {dependancy}; - } - - originalWarFile = new File(outputDirectory, warName + ".war"); - originalWar = new JarFile(originalWarFile); - - newWarFile = new File(outputDirectory, warName + "-temp.war"); - newWar = new JarOutputStream(new FileOutputStream(newWarFile)); - - copyOriginal(originalWar, newWar); - - addEntry(newWar, TUSCANY_PATH); - addEntry(newWar, BOOT_PATH); - addEntry(newWar, EXTENSION_PATH); - addEntry(newWar, REPOSITORY_PATH); - - for (Dependency dependency : bootLibs) { - for (Artifact art : resolveArtifact(dependency.getArtifact(artifactFactory), true)) { - addArtifact(newWar, BOOT_PATH, art); - } - } - - for (Dependency dependency : extensions) { - for (Artifact art : resolveArtifact(dependency.getArtifact(artifactFactory), loadExtensionDependencies)) { - if (dependency.match(art)) { - addArtifact(newWar, EXTENSION_PATH, art); - } - - // Load dependencies even for the extension itself - if (loadExtensionDependencies) { - loadExtensionDependencies(newWar, art); - } - - } - } - - writeDependencyMetadata(newWar); - - success = true; - - } catch (Exception ex) { - throw new MojoExecutionException(ex.getMessage(), ex); - } finally { - IOUtils.closeQuietly(newWar); - } - - if (success) { - if (!originalWarFile.delete()) { - throw new MojoExecutionException("Unable to rename war file"); - } - if (!newWarFile.renameTo(originalWarFile)) { - throw new MojoExecutionException("Unable to rename war file"); - } - } - - } - - /** - * Adds an entry to the JAR failing safe for duplicate. - * - * @param jar JAR to which the entry is added. - * @param entry Entry to be added. - * @return True if added successfully. - * @throws IOException In case of an IO error. - */ - private boolean addEntry(JarOutputStream jar, String entry) throws IOException { - try { - jar.putNextEntry(new JarEntry(entry)); - return true; - } catch(ZipException duplicateEntry) { - getLog().info(duplicateEntry.getMessage()); - return false; - } - } - - /** - * Writes the dependency metadata. - * @param newWar WAR to which the metadata is written. - * @throws IOException In case of an IO error. - */ - private void writeDependencyMetadata(JarOutputStream newWar) throws IOException { - - FileOutputStream depMapOutStream = null; - FileInputStream depMapInStream = null; - - try { - String metadataFile = "dependency.metadata"; - - File file = new File(outputDirectory, "webapp"); - file = new File(file, REPOSITORY_PATH); - file.mkdirs(); - - file = new File(file, metadataFile); - file.createNewFile(); - - depMapOutStream = new FileOutputStream(file); - XMLEncoder xmlEncoder = new XMLEncoder(depMapOutStream); - xmlEncoder.writeObject(transDepenedencyMap); - xmlEncoder.close(); - - if(addEntry(newWar, REPOSITORY_PATH + metadataFile)) { - depMapInStream = new FileInputStream(file); - IOUtils.copy(depMapInStream, newWar); - } - - } finally { - IOUtils.closeQuietly(depMapOutStream); - IOUtils.closeQuietly(depMapInStream); - } - - } - - /** - * Builds the transitive dependencies for artifacts. - * - * @param newWar WARto which the artifacts are added. - * @param art Extension artifact. - * @throws IOException In case of an unexpected IO error. - * @throws ArtifactResolutionException If the artifact cannot be resolved. - * @throws ArtifactNotFoundException If the artifact is not found. - * @throws ArtifactMetadataRetrievalException In case of error in retrieving metadata. - */ - private void loadExtensionDependencies(JarOutputStream newWar, Artifact art) throws IOException, ArtifactResolutionException, ArtifactNotFoundException, ArtifactMetadataRetrievalException { - - String artPath = art.getGroupId() + "/" + art.getArtifactId() + "/" + art.getVersion() + "/"; - String path = REPOSITORY_PATH + artPath; - addArtifact(newWar, path, art); - - Set<String> transDepenedenyList = new HashSet<String>(); - transDepenedencyMap.put(artPath, transDepenedenyList); - - // Get the transitive dependencies for each dependency. - for (Artifact transArt : resolveArtifact(art, true)) { - - String transArtPath = transArt.getGroupId() + "/" + transArt.getArtifactId() + "/" + transArt.getVersion() + "/" + transArt.getFile().getName(); - transDepenedenyList.add(transArtPath); - - } - - } - - /** - * Resolves the specified artifact. - * - * @param artifact Artifact to be resolved. - * @param transitive Whether to resolve transitively. - * @return A set of resolved artifacts. - * @throws IOException In case of an unexpected IO error. - * @throws ArtifactResolutionException If the artifact cannot be resolved. - * @throws ArtifactNotFoundException If the artifact is not found. - * @throws ArtifactMetadataRetrievalException In case of error in retrieving metadata. - */ - private Set<Artifact> resolveArtifact(Artifact artifact, boolean transitive) throws IOException, ArtifactResolutionException, - ArtifactNotFoundException, ArtifactMetadataRetrievalException { - - Set<Artifact> resolvedArtifacts = new HashSet<Artifact>(); - - // Resolve the artifact - resolver.resolve(artifact, remoteRepositories, localRepository); - resolvedArtifacts.add((Artifact) artifact); - - if (!transitive) { - return resolvedArtifacts; - } - - // Transitively resolve all the dependencies - ResolutionGroup resolutionGroup = metadataSource.retrieve(artifact, localRepository, remoteRepositories); - ArtifactResolutionResult result = resolver.resolveTransitively(resolutionGroup.getArtifacts(), artifact, remoteRepositories, localRepository, - metadataSource); - - // Add the artifacts to the deployment unit - for (Object depArtifact : result.getArtifacts()) { - resolvedArtifacts.add((Artifact) depArtifact); - } - return resolvedArtifacts; - - } - - /** - * Adds the artifact to the war file. - * - * @param newWar War file to which the artifact is added. - * @param path Path within the war file where artifact is added. - * @param artifact Artifact to be added. - * @throws IOException In case of an unexpected IO error. - */ - private void addArtifact(JarOutputStream newWar, String path, Artifact artifact) throws IOException { - - FileInputStream artifactStream = null; - FileOutputStream fileOutputStream = null; - - try { - - File artifactFile = artifact.getFile(); - // For extensions, we'll add it even the packagedLibs has it - if ((!EXTENSION_PATH.equals(path)) && packagedLibs.contains(artifactFile.getName())) { - return; - } - artifactStream = new FileInputStream(artifactFile); - - newWar.putNextEntry(new JarEntry(path + artifactFile.getName())); - - File file = new File(outputDirectory, "webapp"); - file = new File(file, path); - file.mkdirs(); - - file = new File(file, artifactFile.getName()); - fileOutputStream = new FileOutputStream(file); - - IOUtils.copy(artifactStream, fileOutputStream); - IOUtils.closeQuietly(artifactStream); - - artifactStream = new FileInputStream(artifactFile); - IOUtils.copy(artifactStream, newWar); - - packagedLibs.add(artifactFile.getName()); - - getLog().info("Processed " + path + artifactFile.getName()); - - } finally { - IOUtils.closeQuietly(artifactStream); - IOUtils.closeQuietly(fileOutputStream); - } - - } - - /** - * Copies the original war file. - * - * @param originalWar Original war file. - * @param newWar New war file. - * @throws IOException In case of an unexpected IO error. - */ - private void copyOriginal(JarFile originalWar, JarOutputStream newWar) throws IOException { - - Enumeration entries = originalWar.entries(); - packagedLibs.clear(); - - while (entries.hasMoreElements()) { - - JarEntry entry = (JarEntry) entries.nextElement(); - InputStream jarEntryStream = null; - - try { - jarEntryStream = originalWar.getInputStream(entry); - newWar.putNextEntry(entry); - IOUtils.copy(jarEntryStream, newWar); - String name = entry.getName(); - - if (name.endsWith(".jar")) { - packagedLibs.add(name.substring(name.lastIndexOf("/") + 1)); - } - } finally { - IOUtils.closeQuietly(jarEntryStream); - } - - } - - originalWar.close(); - - } - -} |