⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bobberarchetype.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2001-2005 The Apache Software Foundation. * * 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 * *      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 com.javaforge.bobber.plugin.archetype;import com.javaforge.bobber.archetype.model.Template;import com.javaforge.bobber.archetype.model.Variable;import com.javaforge.bobber.archetype.model.io.xpp3.BobberArchetypeXpp3Reader;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.StringWriter;import java.io.Writer;import java.net.MalformedURLException;import java.net.URL;import java.net.URLClassLoader;import java.util.ArrayList;import java.util.Enumeration;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.StringTokenizer;import java.util.jar.JarEntry;import java.util.jar.JarFile;import java.util.zip.ZipEntry;import org.apache.maven.archetype.Archetype;import org.apache.maven.archetype.ArchetypeDescriptorException;import org.apache.maven.archetype.ArchetypeNotFoundException;import org.apache.maven.archetype.ArchetypeTemplateProcessingException;import org.apache.maven.artifact.Artifact;import org.apache.maven.artifact.factory.ArtifactFactory;import org.apache.maven.artifact.repository.ArtifactRepository;import org.apache.maven.artifact.resolver.ArtifactResolutionException;import org.apache.maven.artifact.resolver.ArtifactResolver;import org.apache.maven.settings.MavenSettingsBuilder;import org.apache.velocity.VelocityContext;import org.codehaus.plexus.components.interactivity.InputHandler;import org.codehaus.plexus.logging.AbstractLogEnabled;import org.codehaus.plexus.util.FileUtils;import org.codehaus.plexus.util.IOUtil;import org.codehaus.plexus.util.StringUtils;import org.codehaus.plexus.util.xml.pull.XmlPullParserException;import org.codehaus.plexus.velocity.VelocityComponent;//source blatantly copied from org.apache.maven.archetype.DefaultArchetype. Also stole code from DefaultPluginVersionManager.java//and maven-model for the mdopublic class BobberArchetype        extends AbstractLogEnabled        implements Archetype{    private static final String NEW_LINE = System.getProperty("line.separator");    // ----------------------------------------------------------------------    // Components    // ----------------------------------------------------------------------    /** @component */    private VelocityComponent velocity;    /** @component */    private ArtifactResolver artifactResolver;    /** @component */    private InputHandler inputHandler;    /** @component */    private ArtifactFactory artifactFactory;    /** @component */    private MavenSettingsBuilder settingsBuilder;    private static final int MESSAGE_LINE_LENGTH = 80;    public void createArchetype(String archetypeGroupId, String archetypeArtifactId, String archetypeVersion,                                ArtifactRepository localRepository, List remoteRepositories, Map parameters)            throws ArchetypeNotFoundException, ArchetypeDescriptorException, ArchetypeTemplateProcessingException    {        // ---------------------------------------------------------------------        //locate the archetype file        // ---------------------------------------------------------------------        Artifact archetypeArtifact = artifactFactory.createArtifact(archetypeGroupId, archetypeArtifactId,                archetypeVersion, Artifact.SCOPE_RUNTIME, "jar");        try        {            artifactResolver.resolve(archetypeArtifact, remoteRepositories, localRepository);        }        catch (ArtifactResolutionException e)        {            throw new ArchetypeDescriptorException("Error attempting to download archetype: " + e.getMessage(), e);        }        // ----------------------------------------------------------------------        // Load the archetype descriptor        // ----------------------------------------------------------------------        BobberArchetypeXpp3Reader builder = new BobberArchetypeXpp3Reader();        com.javaforge.bobber.archetype.model.BobberArchetype archetype;        JarFile archetypeJarFile;        try        {            archetypeJarFile = new JarFile(archetypeArtifact.getFile());            final ZipEntry zipEntry = archetypeJarFile.getEntry(ARCHETYPE_DESCRIPTOR);            InputStream is = archetypeJarFile.getInputStream(zipEntry);            if (is == null)            {                throw new ArchetypeDescriptorException(                        "The " + ARCHETYPE_DESCRIPTOR + " descriptor cannot be found.");            }            archetype = builder.read(new InputStreamReader(is));            archetypeJarFile.close();        }        catch (IOException e)        {            throw new ArchetypeDescriptorException("Error reading the " + ARCHETYPE_DESCRIPTOR + " descriptor.", e);        }        catch (XmlPullParserException e)        {            throw new ArchetypeDescriptorException("Error reading the " + ARCHETYPE_DESCRIPTOR + " descriptor.", e);        }        // ----------------------------------------------------------------------        //        // ----------------------------------------------------------------------        String basedir = (String) parameters.get("basedir");        String artifactId = (String) parameters.get("artifactId");        File pomFile = new File(basedir, ARCHETYPE_POM);        File outputDirectoryFile;        if (pomFile.exists() && archetype.isAllowPartial())        {            outputDirectoryFile = new File(basedir);        }        else        {            outputDirectoryFile = new File(basedir, artifactId);            // TODO temporarily allow partial generation, remove it later            if (!archetype.isAllowPartial() &&                    outputDirectoryFile.exists() &&                    outputDirectoryFile.listFiles().length > 0)            {                throw new ArchetypeTemplateProcessingException(                        outputDirectoryFile.getName() + " already exists - please run from a clean directory");            }            outputDirectoryFile.mkdir();        }        String outputDirectory = outputDirectoryFile.getAbsolutePath();        // ----------------------------------------------------------------------        // Set up the Velocity context        // ----------------------------------------------------------------------        VelocityContext context = new VelocityContext();        String packageName = (String) parameters.get("package");        addParamToContext("package", packageName, context);        addParamToContext("packagePath", StringUtils.replace(packageName, ".", "/"), context);        for (Iterator iterator = parameters.keySet().iterator(); iterator.hasNext();)        {            String key = (String) iterator.next();            Object value = parameters.get(key);            addParamToContext(key, value, context);        }        //add in the specified system properties        //if this were a mojo could have set the settings using the ${settings} expression. Since it is not need to get it from the settings builder        boolean inInteractiveMode = false;        try        {            inInteractiveMode = settingsBuilder.buildSettings().getInteractiveMode().booleanValue();            //TODO there must be a cleaner way of doing this            String temp = System.getProperty("interactive", null);            if (temp != null)            {                inInteractiveMode = Boolean.valueOf(temp).booleanValue();            }            getLogger().info("Interactive is: " + inInteractiveMode);        }        catch (Exception ie)        {            throw new ArchetypeTemplateProcessingException("unable to read settings ", ie);        }        if (inInteractiveMode)        {            getLogger().info("Please enter the values for the following archetype variables:");        }        final List variables = archetype.getVariables();        processVariables(variables.iterator(), context, inInteractiveMode);        // ---------------------------------------------------------------------        // Get Logger and display all parameters used        // ---------------------------------------------------------------------        if (getLogger().isInfoEnabled())        {            Object[] keys = context.getKeys();            if (keys.length > 0)            {                getLogger().info("----------------------------------------------------------------------------");                getLogger().info("Using following parameters for creating Archetype: " + archetypeArtifactId + ":" +                        archetypeVersion);                getLogger().info("----------------------------------------------------------------------------");                for (int i = 0; i < keys.length; i++)                {                    String parameterName = (String) keys[i];                    Object parameterValue = context.get(parameterName);                    getLogger().info("Parameter: " + parameterName + " = " + parameterValue);                }            }            else            {                getLogger().info("No Parameters found for creating Archetype");            }        }        // ----------------------------------------------------------------------        // Extract the archetype to the chosen directory        // ----------------------------------------------------------------------        try        {            archetypeJarFile = new JarFile(archetypeArtifact.getFile());            Enumeration entries = archetypeJarFile.entries();            while (entries.hasMoreElements())            {                JarEntry entry = (JarEntry) entries.nextElement();                String path = entry.getName();                if (!path.startsWith(ARCHETYPE_RESOURCES) || path.endsWith(".vm"))                {                    continue;                }                File t = new File(outputDirectory, path.substring(19));                if (entry.isDirectory())                {                    // Assume directories are stored parents first then children.                    getLogger().debug("Extracting directory: " + entry.getName() + " to " + t.getAbsolutePath());                    t.mkdir();                    continue;                }                getLogger().debug("Extracting file: " + entry.getName() + " to " + t.getAbsolutePath());                t.createNewFile();                IOUtil.copy(archetypeJarFile.getInputStream(entry), new FileOutputStream(t));            }            archetypeJarFile.close();            //remove the archetype descriptor            File t = new File(outputDirectory, ARCHETYPE_DESCRIPTOR);            t.delete();        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -