Created
August 16, 2016 04:04
-
-
Save gamerson/054e101d2bd1e3e2ba6c4e4b501b062b to your computer and use it in GitHub Desktop.
ArchetypeClient
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.File; | |
import java.lang.reflect.Field; | |
import java.util.ArrayList; | |
import java.util.List; | |
import java.util.Properties; | |
import org.apache.maven.archetype.ArchetypeGenerationRequest; | |
import org.apache.maven.archetype.ArchetypeGenerationResult; | |
import org.apache.maven.archetype.DefaultArchetypeManager; | |
import org.apache.maven.archetype.common.ArchetypeFilesResolver; | |
import org.apache.maven.archetype.common.DefaultArchetypeArtifactManager; | |
import org.apache.maven.archetype.common.DefaultArchetypeFilesResolver; | |
import org.apache.maven.archetype.downloader.DefaultDownloader; | |
import org.apache.maven.archetype.generator.DefaultArchetypeGenerator; | |
import org.apache.maven.archetype.generator.DefaultFilesetArchetypeGenerator; | |
import org.apache.maven.artifact.factory.DefaultArtifactFactory; | |
import org.apache.maven.artifact.repository.ArtifactRepository; | |
import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; | |
import org.apache.maven.artifact.repository.DefaultArtifactRepositoryFactory; | |
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; | |
import org.apache.maven.artifact.resolver.DefaultArtifactResolver; | |
import org.apache.maven.artifact.transform.ArtifactTransformation; | |
import org.apache.maven.artifact.transform.DefaultArtifactTransformationManager; | |
import org.apache.maven.artifact.transform.LatestArtifactTransformation; | |
import org.apache.maven.artifact.transform.ReleaseArtifactTransformation; | |
import org.apache.maven.artifact.transform.SnapshotTransformation; | |
import org.apache.velocity.runtime.RuntimeConstants; | |
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; | |
import org.codehaus.plexus.logging.AbstractLogEnabled; | |
import org.codehaus.plexus.logging.console.ConsoleLogger; | |
import org.codehaus.plexus.velocity.DefaultVelocityComponent; | |
public class ArchetypeClient | |
{ | |
public static void main( String[] args ) throws Exception | |
{ | |
DefaultArchetypeManager archetypeManager = new DefaultArchetypeManager(); | |
Field generator = DefaultArchetypeManager.class.getDeclaredField( "generator" ); | |
generator.setAccessible( true ); | |
DefaultArchetypeGenerator defaultArchetypeGenerator = new DefaultArchetypeGenerator(); | |
Field manager = DefaultArchetypeGenerator.class.getDeclaredField( "archetypeArtifactManager" ); | |
manager.setAccessible( true ); | |
DefaultArchetypeArtifactManager defaultArchetypeArtifactManager = new DefaultArchetypeArtifactManager(); | |
Field logger = AbstractLogEnabled.class.getDeclaredField( "logger" ); | |
logger.setAccessible( true ); | |
final ConsoleLogger consoleLogger = new ConsoleLogger( 0, "console" ); | |
logger.set( defaultArchetypeArtifactManager, consoleLogger ); | |
Field downloader = DefaultArchetypeArtifactManager.class.getDeclaredField( "downloader" ); | |
downloader.setAccessible( true ); | |
DefaultDownloader defaultDownloader = new DefaultDownloader(); | |
Field artifactResolver = DefaultDownloader.class.getDeclaredField( "artifactResolver" ); | |
artifactResolver.setAccessible( true ); | |
DefaultArtifactResolver dar = new DefaultArtifactResolver(); | |
Field transformationManager = DefaultArtifactResolver.class.getDeclaredField( "transformationManager" ); | |
transformationManager.setAccessible( true ); | |
DefaultArtifactTransformationManager datm = new DefaultArtifactTransformationManager(); | |
Field artifactTransformations = DefaultArtifactTransformationManager.class.getDeclaredField( "artifactTransformations" ); | |
artifactTransformations.setAccessible( true ); | |
List<ArtifactTransformation> artifactTransformationsValue = new ArrayList<>(); | |
artifactTransformationsValue.add( new LatestArtifactTransformation() ); | |
artifactTransformationsValue.add( new ReleaseArtifactTransformation() ); | |
artifactTransformationsValue.add( new SnapshotTransformation() ); | |
artifactTransformations.set( datm, artifactTransformationsValue ); | |
datm.initialize(); | |
transformationManager.set( dar, datm ); | |
artifactResolver.set( defaultDownloader, dar ); | |
Field artifactFactory = DefaultDownloader.class.getDeclaredField( "artifactFactory" ); | |
artifactFactory.setAccessible( true ); | |
DefaultArtifactFactory defaultArtifactFactory = new DefaultArtifactFactory(); | |
Field artifactHandlerManager = DefaultArtifactFactory.class.getDeclaredField( "artifactHandlerManager" ); | |
artifactHandlerManager.setAccessible( true ); | |
artifactHandlerManager.set( defaultArtifactFactory, new SimpleArtifactHandlerManager() ); | |
artifactFactory.set( defaultDownloader, defaultArtifactFactory ); | |
downloader.set( defaultArchetypeArtifactManager, defaultDownloader ); | |
manager.set( defaultArchetypeGenerator, defaultArchetypeArtifactManager ); | |
Field filesetGenerator = DefaultArchetypeGenerator.class.getDeclaredField( "filesetGenerator" ); | |
filesetGenerator.setAccessible( true ); | |
DefaultFilesetArchetypeGenerator dfag = new DefaultFilesetArchetypeGenerator(); | |
Field archetypeArtifactManager = DefaultFilesetArchetypeGenerator.class.getDeclaredField( "archetypeArtifactManager" ); | |
archetypeArtifactManager.setAccessible( true ); | |
DefaultArchetypeArtifactManager daam = new DefaultArchetypeArtifactManager(); | |
downloader.set( daam, defaultDownloader ); | |
logger.set( daam, consoleLogger ); | |
logger.set( dfag, consoleLogger ); | |
archetypeArtifactManager.set( dfag, daam ); | |
filesetGenerator.set( defaultArchetypeGenerator, dfag ); | |
generator.set( archetypeManager, defaultArchetypeGenerator ); | |
ArchetypeGenerationRequest archetypeGenerationRequest = new ArchetypeGenerationRequest(); | |
archetypeGenerationRequest.setArchetypeArtifactId( "com.liferay.project.templates.mvcportlet" ); | |
archetypeGenerationRequest.setArchetypeGroupId( "com.liferay" ); | |
archetypeGenerationRequest.setArchetypeVersion( "1.0.0" ); | |
archetypeGenerationRequest.setArtifactId( "foo" ); | |
archetypeGenerationRequest.setGroupId( "com.liferay" ); | |
archetypeGenerationRequest.setVersion( "1.0.0" ); | |
archetypeGenerationRequest.setInteractiveMode( false ); | |
archetypeGenerationRequest.setPackage( "com.liferay.foo" ); | |
archetypeGenerationRequest.setOutputDirectory( "target" ); | |
ArtifactRepositoryFactory artifactRepositoryFactory = new DefaultArtifactRepositoryFactory(); | |
ArtifactRepository localRepository = artifactRepositoryFactory.createArtifactRepository( "local", new File("/Users/greg/.m2/repository").toURI().toURL().toExternalForm(), new DefaultRepositoryLayout(), null, null ); | |
archetypeGenerationRequest.setLocalRepository( localRepository ); | |
Properties additionalProperties = new Properties(); | |
additionalProperties.put( "package", "com.liferay.foo" ); | |
additionalProperties.put( "className", "Bar" ); | |
archetypeGenerationRequest.setProperties( additionalProperties ); | |
logger.set( archetypeManager, consoleLogger ); | |
DefaultVelocityComponent defaultVelocityComponent = new DefaultVelocityComponent(); | |
logger.set( defaultVelocityComponent, consoleLogger ); | |
Field properties = DefaultVelocityComponent.class.getDeclaredField( "properties" ); | |
properties.setAccessible( true ); | |
Properties velocityProps = new Properties(); | |
velocityProps.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); | |
velocityProps.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); | |
properties.set( defaultVelocityComponent, velocityProps ); | |
Field velocity = DefaultFilesetArchetypeGenerator.class.getDeclaredField( "velocity" ); | |
velocity.setAccessible( true ); | |
velocity.set( dfag, defaultVelocityComponent ); | |
defaultVelocityComponent.initialize(); | |
DefaultArchetypeFilesResolver defaultArchetypeFilesResolver = new DefaultArchetypeFilesResolver(); | |
Field archetypeFilesResolver = DefaultFilesetArchetypeGenerator.class.getDeclaredField( "archetypeFilesResolver" ); | |
archetypeFilesResolver.setAccessible( true ); | |
archetypeFilesResolver.set( dfag, defaultArchetypeFilesResolver ); | |
ArchetypeGenerationResult result = archetypeManager.generateProjectFromArchetype(archetypeGenerationRequest); | |
System.out.println( result.getCause() ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment