use of org.apache.maven.archetype.metadata.ModuleDescriptor in project maven-archetype by apache.
the class DefaultFilesetArchetypeGenerator method processFilesetModule.
private void processFilesetModule(final String rootArtifactId, final String artifactId, final List<String> archetypeResources, File pom, final ZipFile archetypeZipFile, String moduleOffset, File basedirPom, File outputDirectoryFile, final String packageName, final AbstractArchetypeDescriptor archetypeDescriptor, final Context context) throws DocumentException, XmlPullParserException, ArchetypeGenerationFailure, InvalidPackaging, IOException, OutputFileExists {
outputDirectoryFile.mkdirs();
getLogger().debug("Processing module " + artifactId);
getLogger().debug("Processing module rootArtifactId " + rootArtifactId);
getLogger().debug("Processing module pom " + pom);
getLogger().debug("Processing module moduleOffset " + moduleOffset);
getLogger().debug("Processing module outputDirectoryFile " + outputDirectoryFile);
processFilesetProject(archetypeDescriptor, StringUtils.replace(artifactId, "${rootArtifactId}", rootArtifactId), archetypeResources, pom, archetypeZipFile, moduleOffset, context, packageName, outputDirectoryFile, basedirPom);
String parentArtifactId = (String) context.get(Constants.PARENT_ARTIFACT_ID);
Iterator<ModuleDescriptor> subprojects = archetypeDescriptor.getModules().iterator();
if (subprojects.hasNext()) {
getLogger().debug(artifactId + " has modules (" + archetypeDescriptor.getModules() + ")");
setParentArtifactId(context, StringUtils.replace(artifactId, "${rootArtifactId}", rootArtifactId));
}
while (subprojects.hasNext()) {
ModuleDescriptor project = subprojects.next();
String modulePath = StringUtils.replace(project.getDir(), "__rootArtifactId__", rootArtifactId);
modulePath = replaceFilenameTokens(modulePath, context);
File moduleOutputDirectoryFile = new File(outputDirectoryFile, modulePath);
context.put(Constants.ARTIFACT_ID, StringUtils.replace(project.getId(), "${rootArtifactId}", rootArtifactId));
String moduleArtifactId = StringUtils.replace(project.getDir(), "__rootArtifactId__", rootArtifactId);
moduleArtifactId = replaceFilenameTokens(moduleArtifactId, context);
processFilesetModule(rootArtifactId, moduleArtifactId, archetypeResources, new File(moduleOutputDirectoryFile, Constants.ARCHETYPE_POM), archetypeZipFile, (StringUtils.isEmpty(moduleOffset) ? "" : (moduleOffset + "/")) + StringUtils.replace(project.getDir(), "${rootArtifactId}", rootArtifactId), pom, moduleOutputDirectoryFile, packageName, project, context);
}
restoreParentArtifactId(context, parentArtifactId);
getLogger().debug("Processed " + artifactId);
}
use of org.apache.maven.archetype.metadata.ModuleDescriptor in project maven-archetype by apache.
the class FilesetArchetypeCreator method createModule.
private ModuleDescriptor createModule(Properties reverseProperties, String rootArtifactId, String moduleId, String packageName, File basedir, File archetypeFilesDirectory, List<String> languages, List<String> filtereds, String defaultEncoding, boolean preserveCData, boolean keepParent) throws IOException, XmlPullParserException {
ModuleDescriptor archetypeDescriptor = new ModuleDescriptor();
getLogger().debug("Starting module's descriptor " + moduleId);
archetypeFilesDirectory.mkdirs();
getLogger().debug("Module's files output directory " + archetypeFilesDirectory);
Model pom = pomManager.readPom(FileUtils.resolveFile(basedir, Constants.ARCHETYPE_POM));
String replacementId = pom.getArtifactId();
String moduleDirectory = pom.getArtifactId();
if (replacementId.indexOf(rootArtifactId) >= 0) {
replacementId = StringUtils.replace(replacementId, rootArtifactId, "${rootArtifactId}");
moduleDirectory = StringUtils.replace(moduleId, rootArtifactId, "__rootArtifactId__");
}
if (moduleId.indexOf(rootArtifactId) >= 0) {
moduleDirectory = StringUtils.replace(moduleId, rootArtifactId, "__rootArtifactId__");
}
archetypeDescriptor.setName(replacementId);
archetypeDescriptor.setId(replacementId);
archetypeDescriptor.setDir(moduleDirectory);
setArtifactId(reverseProperties, pom.getArtifactId());
List<String> excludePatterns = reverseProperties.getProperty(Constants.EXCLUDE_PATTERNS) != null ? Arrays.asList(StringUtils.split(reverseProperties.getProperty(Constants.EXCLUDE_PATTERNS), ",")) : Collections.<String>emptyList();
List<String> fileNames = resolveFileNames(pom, basedir, excludePatterns);
List<FileSet> filesets = resolveFileSets(packageName, fileNames, languages, filtereds, defaultEncoding);
getLogger().debug("Resolved filesets for module " + archetypeDescriptor.getName());
archetypeDescriptor.setFileSets(filesets);
createArchetypeFiles(reverseProperties, filesets, packageName, basedir, archetypeFilesDirectory, defaultEncoding, excludePatterns);
getLogger().debug("Created files for module " + archetypeDescriptor.getName());
String parentArtifactId = reverseProperties.getProperty(Constants.PARENT_ARTIFACT_ID);
setParentArtifactId(reverseProperties, pom.getArtifactId());
for (String subModuleId : pom.getModules()) {
String subModuleIdDirectory = subModuleId;
if (subModuleId.indexOf(rootArtifactId) >= 0) {
subModuleIdDirectory = StringUtils.replace(subModuleId, rootArtifactId, "__rootArtifactId__");
}
getLogger().debug("Creating module " + subModuleId);
ModuleDescriptor moduleDescriptor = createModule(reverseProperties, rootArtifactId, subModuleId, packageName, FileUtils.resolveFile(basedir, subModuleId), FileUtils.resolveFile(archetypeFilesDirectory, subModuleIdDirectory), languages, filtereds, defaultEncoding, preserveCData, keepParent);
archetypeDescriptor.addModule(moduleDescriptor);
getLogger().debug("Added module " + moduleDescriptor.getName() + " in " + archetypeDescriptor.getName());
}
restoreParentArtifactId(reverseProperties, parentArtifactId);
restoreArtifactId(reverseProperties, pom.getArtifactId());
getLogger().debug("Created Module " + archetypeDescriptor.getName() + " pom");
return archetypeDescriptor;
}
use of org.apache.maven.archetype.metadata.ModuleDescriptor in project maven-archetype by apache.
the class FilesetArchetypeCreator method createArchetype.
public void createArchetype(ArchetypeCreationRequest request, ArchetypeCreationResult result) {
MavenProject project = request.getProject();
List<String> languages = request.getLanguages();
List<String> filtereds = request.getFiltereds();
String defaultEncoding = request.getDefaultEncoding();
boolean preserveCData = request.isPreserveCData();
boolean keepParent = request.isKeepParent();
boolean partialArchetype = request.isPartialArchetype();
File outputDirectory = request.getOutputDirectory();
File basedir = project.getBasedir();
Properties properties = new Properties();
Properties configurationProperties = new Properties();
if (request.getProperties() != null) {
properties.putAll(request.getProperties());
configurationProperties.putAll(request.getProperties());
}
extractPropertiesFromProject(project, properties, configurationProperties, request.getPackageName());
if (outputDirectory == null) {
getLogger().debug("No output directory defined, using default: " + DEFAULT_OUTPUT_DIRECTORY);
outputDirectory = FileUtils.resolveFile(basedir, DEFAULT_OUTPUT_DIRECTORY);
}
outputDirectory.mkdirs();
getLogger().debug("Creating archetype in " + outputDirectory);
try {
File archetypePomFile = createArchetypeProjectPom(project, request.getProjectBuildingRequest(), configurationProperties, outputDirectory);
File archetypeResourcesDirectory = new File(outputDirectory, getTemplateOutputDirectory());
File archetypeFilesDirectory = new File(archetypeResourcesDirectory, Constants.ARCHETYPE_RESOURCES);
getLogger().debug("Archetype's files output directory " + archetypeFilesDirectory);
File archetypeDescriptorFile = new File(archetypeResourcesDirectory, Constants.ARCHETYPE_DESCRIPTOR);
archetypeDescriptorFile.getParentFile().mkdirs();
File archetypePostGenerationScript = new File(archetypeResourcesDirectory, Constants.ARCHETYPE_POST_GENERATION_SCRIPT);
archetypePostGenerationScript.getParentFile().mkdirs();
if (request.getProject().getBuild() != null && CollectionUtils.isNotEmpty(request.getProject().getBuild().getResources())) {
for (Resource resource : request.getProject().getBuild().getResources()) {
File inputFile = new File(resource.getDirectory() + File.separator + Constants.ARCHETYPE_POST_GENERATION_SCRIPT);
if (inputFile.exists()) {
FileUtils.copyFile(inputFile, archetypePostGenerationScript);
}
}
}
getLogger().debug("Starting archetype's descriptor " + project.getArtifactId());
ArchetypeDescriptor archetypeDescriptor = new ArchetypeDescriptor();
archetypeDescriptor.setName(project.getArtifactId());
archetypeDescriptor.setPartial(partialArchetype);
addRequiredProperties(archetypeDescriptor, properties);
// TODO ensure reverseProperties contains NO dotted properties
Properties reverseProperties = getReversedProperties(archetypeDescriptor, properties);
// reverseProperties.remove( Constants.GROUP_ID );
// TODO ensure pomReversedProperties contains NO dotted properties
Properties pomReversedProperties = getReversedProperties(archetypeDescriptor, properties);
// pomReversedProperties.remove( Constants.PACKAGE );
String packageName = configurationProperties.getProperty(Constants.PACKAGE);
Model pom = pomManager.readPom(FileUtils.resolveFile(basedir, Constants.ARCHETYPE_POM));
List<String> excludePatterns = configurationProperties.getProperty(Constants.EXCLUDE_PATTERNS) != null ? Arrays.asList(StringUtils.split(configurationProperties.getProperty(Constants.EXCLUDE_PATTERNS), ",")) : Collections.<String>emptyList();
List<String> fileNames = resolveFileNames(pom, basedir, excludePatterns);
if (getLogger().isDebugEnabled()) {
getLogger().debug("Scanned for files " + fileNames.size());
for (String name : fileNames) {
getLogger().debug("- " + name);
}
}
List<FileSet> filesets = resolveFileSets(packageName, fileNames, languages, filtereds, defaultEncoding);
getLogger().debug("Resolved filesets for " + archetypeDescriptor.getName());
archetypeDescriptor.setFileSets(filesets);
createArchetypeFiles(reverseProperties, filesets, packageName, basedir, archetypeFilesDirectory, defaultEncoding, excludePatterns);
getLogger().debug("Created files for " + archetypeDescriptor.getName());
setParentArtifactId(reverseProperties, configurationProperties.getProperty(Constants.ARTIFACT_ID));
for (String moduleId : pom.getModules()) {
String rootArtifactId = configurationProperties.getProperty(Constants.ARTIFACT_ID);
String moduleIdDirectory = moduleId;
if (moduleId.indexOf(rootArtifactId) >= 0) {
moduleIdDirectory = StringUtils.replace(moduleId, rootArtifactId, "__rootArtifactId__");
}
getLogger().debug("Creating module " + moduleId);
ModuleDescriptor moduleDescriptor = createModule(reverseProperties, rootArtifactId, moduleId, packageName, FileUtils.resolveFile(basedir, moduleId), new File(archetypeFilesDirectory, moduleIdDirectory), languages, filtereds, defaultEncoding, preserveCData, keepParent);
archetypeDescriptor.addModule(moduleDescriptor);
getLogger().debug("Added module " + moduleDescriptor.getName() + " in " + archetypeDescriptor.getName());
}
restoreParentArtifactId(reverseProperties, null);
restoreArtifactId(reverseProperties, configurationProperties.getProperty(Constants.ARTIFACT_ID));
createPoms(pom, configurationProperties.getProperty(Constants.ARTIFACT_ID), configurationProperties.getProperty(Constants.ARTIFACT_ID), archetypeFilesDirectory, basedir, pomReversedProperties, preserveCData, keepParent);
getLogger().debug("Created Archetype " + archetypeDescriptor.getName() + " template pom(s)");
Writer out = null;
try {
out = WriterFactory.newXmlWriter(archetypeDescriptorFile);
ArchetypeDescriptorXpp3Writer writer = new ArchetypeDescriptorXpp3Writer();
writer.write(out, archetypeDescriptor);
getLogger().debug("Archetype " + archetypeDescriptor.getName() + " descriptor written");
} finally {
IOUtil.close(out);
}
createArchetypeBasicIt(archetypeDescriptor, outputDirectory);
// Copy archetype integration tests.
File archetypeIntegrationTestInputFolder = new File(basedir, Constants.SRC + File.separator + "it" + File.separator + "projects");
File archetypeIntegrationTestOutputFolder = new File(outputDirectory, Constants.SRC + File.separator + Constants.TEST + File.separator + Constants.RESOURCES + File.separator + "projects");
if (archetypeIntegrationTestInputFolder.exists()) {
getLogger().info("Copying: " + archetypeIntegrationTestInputFolder.getAbsolutePath() + " into " + archetypeIntegrationTestOutputFolder.getAbsolutePath());
FileUtils.copyDirectoryStructure(archetypeIntegrationTestInputFolder, archetypeIntegrationTestOutputFolder);
}
InvocationRequest internalRequest = new DefaultInvocationRequest();
internalRequest.setPomFile(archetypePomFile);
internalRequest.setGoals(Collections.singletonList(request.getPostPhase()));
if (request.getLocalRepository() != null) {
internalRequest.setLocalRepositoryDirectory(new File(request.getLocalRepository().getBasedir()));
}
InvocationResult invokerResult = invoker.execute(internalRequest);
if (invokerResult.getExitCode() != 0) {
if (invokerResult.getExecutionException() != null) {
throw invokerResult.getExecutionException();
} else {
throw new Exception("Invoker process ended with result different than 0!");
}
}
} catch (Exception e) {
result.setCause(e);
}
}
Aggregations