mirror of https://github.com/apache/maven.git
Merge of SI_MAVEN_2_1 branch. New builder code.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@679609 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
d52ffdef81
commit
c8b842c976
|
@ -334,9 +334,9 @@ public class MavenEmbedderTest
|
|||
|
||||
MavenProject project = maven.readProject( pomFile );
|
||||
|
||||
assertEquals( "http://host/viewer?path=/trunk/parent/modules/child1", project.getScm().getUrl() );
|
||||
assertEquals( "scm:svn:http://host/trunk/parent/modules/child1", project.getScm().getConnection() );
|
||||
assertEquals( "scm:svn:https://host/trunk/parent/modules/child1", project.getScm().getDeveloperConnection() );
|
||||
assertEquals( "http://host/viewer?path=/trunk/parent/child1", project.getScm().getUrl() );
|
||||
assertEquals( "scm:svn:http://host/trunk/parent/child1", project.getScm().getConnection() );
|
||||
assertEquals( "scm:svn:https://host/trunk/parent/child1", project.getScm().getDeveloperConnection() );
|
||||
}
|
||||
|
||||
public void testProjectReading_SkipMissingModuleSilently()
|
||||
|
|
|
@ -69,6 +69,14 @@ under the License.
|
|||
<artifactId>wagon-file</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>wstx-asl</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-shared-model</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<plugins>
|
||||
|
|
|
@ -46,6 +46,7 @@ import org.apache.maven.model.Extension;
|
|||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Plugin;
|
||||
import org.apache.maven.model.PluginManagement;
|
||||
import org.apache.maven.model.Parent;
|
||||
import org.apache.maven.model.ReportPlugin;
|
||||
import org.apache.maven.model.Repository;
|
||||
import org.apache.maven.model.Resource;
|
||||
|
@ -69,6 +70,9 @@ import org.apache.maven.project.path.PathTranslator;
|
|||
import org.apache.maven.project.validation.ModelValidationResult;
|
||||
import org.apache.maven.project.validation.ModelValidator;
|
||||
import org.apache.maven.project.workspace.ProjectWorkspace;
|
||||
import org.apache.maven.project.builder.PomArtifactResolver;
|
||||
import org.apache.maven.project.builder.ProjectBuilder;
|
||||
import org.apache.maven.project.builder.PomClassicDomainModel;
|
||||
import org.codehaus.plexus.logging.LogEnabled;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
|
||||
|
@ -77,24 +81,9 @@ import org.codehaus.plexus.util.ReaderFactory;
|
|||
import org.codehaus.plexus.util.StringUtils;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.io.*;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.*;
|
||||
|
||||
/*:apt
|
||||
|
||||
|
@ -166,6 +155,8 @@ public class DefaultMavenProjectBuilder
|
|||
|
||||
private ProjectWorkspace projectWorkspace;
|
||||
|
||||
private ProjectBuilder projectBuilder;
|
||||
|
||||
//DO NOT USE, it is here only for backward compatibility reasons. The existing
|
||||
// maven-assembly-plugin (2.2-beta-1) is accessing it via reflection.
|
||||
|
||||
|
@ -500,10 +491,8 @@ public class DefaultMavenProjectBuilder
|
|||
|
||||
if ( project == null )
|
||||
{
|
||||
// getLogger().debug( "Allowing project-build to proceed for: " + projectDescriptor );
|
||||
|
||||
Model model = readModel( "unknown", projectDescriptor, STRICT_MODEL_PARSING );
|
||||
|
||||
Model model = readModelFromLocalPath( "unknown", projectDescriptor, new PomArtifactResolver(config.getLocalRepository(),
|
||||
buildArtifactRepositories( getSuperModel() ), artifactResolver) );
|
||||
project = buildInternal(model,
|
||||
config,
|
||||
buildArtifactRepositories( getSuperModel() ),
|
||||
|
@ -512,11 +501,6 @@ public class DefaultMavenProjectBuilder
|
|||
true,
|
||||
true );
|
||||
}
|
||||
// else
|
||||
// {
|
||||
// getLogger().debug( "Returning cached project: " + project );
|
||||
// }
|
||||
|
||||
return project;
|
||||
}
|
||||
|
||||
|
@ -525,8 +509,8 @@ public class DefaultMavenProjectBuilder
|
|||
ArtifactRepository localRepository )
|
||||
throws ProjectBuildingException
|
||||
{
|
||||
String projectId = safeVersionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
|
||||
|
||||
String projectId = safeVersionlessKey( artifact.getGroupId(), artifact.getArtifactId() );
|
||||
remoteArtifactRepositories = normalizeToArtifactRepositories( remoteArtifactRepositories, projectId );
|
||||
|
||||
Artifact projectArtifact;
|
||||
|
@ -548,21 +532,20 @@ public class DefaultMavenProjectBuilder
|
|||
artifact.getScope() );
|
||||
}
|
||||
|
||||
Model model;
|
||||
|
||||
Model legacy_model;
|
||||
try
|
||||
{
|
||||
artifactResolver.resolve( projectArtifact, remoteArtifactRepositories, localRepository );
|
||||
|
||||
File file = projectArtifact.getFile();
|
||||
|
||||
model = readModel( projectId, file, STRICT_MODEL_PARSING );
|
||||
legacy_model = readModelLegacy( projectId, file, STRICT_MODEL_PARSING );
|
||||
|
||||
String downloadUrl = null;
|
||||
|
||||
ArtifactStatus status = ArtifactStatus.NONE;
|
||||
|
||||
DistributionManagement distributionManagement = model.getDistributionManagement();
|
||||
DistributionManagement distributionManagement = legacy_model.getDistributionManagement();
|
||||
|
||||
if ( distributionManagement != null )
|
||||
{
|
||||
|
@ -581,7 +564,7 @@ public class DefaultMavenProjectBuilder
|
|||
}
|
||||
else
|
||||
{
|
||||
projectArtifact.setDownloadUrl( model.getUrl() );
|
||||
projectArtifact.setDownloadUrl( legacy_model.getUrl() );
|
||||
}
|
||||
}
|
||||
catch ( ArtifactResolutionException e )
|
||||
|
@ -593,7 +576,7 @@ public class DefaultMavenProjectBuilder
|
|||
throw new ProjectBuildingException( projectId, "POM '" + projectId + "' not found in repository: " + e.getMessage(), e );
|
||||
}
|
||||
|
||||
return model;
|
||||
return legacy_model;
|
||||
}
|
||||
|
||||
private List normalizeToArtifactRepositories( List remoteArtifactRepositories,
|
||||
|
@ -841,6 +824,7 @@ public class DefaultMavenProjectBuilder
|
|||
|
||||
// getLogger().debug( "Caching project: " + project.getId() + " (also keyed by file: " + project.getFile() + ")" );
|
||||
|
||||
|
||||
projectWorkspace.storeProjectByCoordinate( project );
|
||||
projectWorkspace.storeProjectByFile( project );
|
||||
|
||||
|
@ -1791,7 +1775,7 @@ public class DefaultMavenProjectBuilder
|
|||
}
|
||||
}
|
||||
|
||||
private Model readModel( String projectId,
|
||||
private Model readModelLegacy( String projectId,
|
||||
File file,
|
||||
boolean strict )
|
||||
throws ProjectBuildingException
|
||||
|
@ -2085,4 +2069,31 @@ public class DefaultMavenProjectBuilder
|
|||
{
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
private Model readModelFromLocalPath( String projectId,
|
||||
File projectDescriptor,
|
||||
PomArtifactResolver resolver )
|
||||
throws ProjectBuildingException
|
||||
{
|
||||
if(projectDescriptor == null) {
|
||||
throw new IllegalArgumentException("projectDescriptor: null, Project Id =" + projectId);
|
||||
}
|
||||
|
||||
if(projectBuilder == null) {
|
||||
throw new IllegalArgumentException("projectBuilder: not initialized");
|
||||
}
|
||||
|
||||
MavenProject mavenProject;
|
||||
try {
|
||||
mavenProject = projectBuilder.buildFromLocalPath(new FileInputStream(projectDescriptor),
|
||||
null, null, resolver,
|
||||
projectDescriptor.getParentFile());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
throw new ProjectBuildingException(projectId, "File = " + projectDescriptor.getAbsolutePath() , e);
|
||||
}
|
||||
|
||||
return mavenProject.getModel();
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,186 @@
|
|||
package org.apache.maven.project.builder;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.shared.model.ModelContainer;
|
||||
import org.apache.maven.shared.model.ModelContainerAction;
|
||||
import org.apache.maven.shared.model.ModelContainerFactory;
|
||||
import org.apache.maven.shared.model.ModelProperty;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public final class ArtifactModelContainerFactory
|
||||
implements ModelContainerFactory
|
||||
{
|
||||
|
||||
private static final Collection<String> uris = Collections.unmodifiableList( Arrays.asList(
|
||||
|
||||
ProjectUri.DependencyManagement.Dependencies.Dependency.xUri, ProjectUri.Dependencies.Dependency.xUri,
|
||||
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.Dependencies.Dependency.xUri,
|
||||
|
||||
ProjectUri.Build.Plugins.Plugin.xUri, ProjectUri.Build.Plugins.Plugin.Dependencies.Dependency.xUri,
|
||||
ProjectUri.Build.Plugins.Plugin.Dependencies.Dependency.Exclusions.Exclusion.xUri ) );
|
||||
|
||||
public Collection<String> getUris()
|
||||
{
|
||||
return uris;
|
||||
}
|
||||
|
||||
public ModelContainer create( List<ModelProperty> modelProperties )
|
||||
{
|
||||
if ( modelProperties == null || modelProperties.size() == 0 )
|
||||
{
|
||||
throw new IllegalArgumentException( "modelProperties: null or empty" );
|
||||
}
|
||||
return new ArtifactModelContainer( modelProperties );
|
||||
}
|
||||
|
||||
private static class ArtifactModelContainer
|
||||
implements ModelContainer
|
||||
{
|
||||
|
||||
private String groupId;
|
||||
|
||||
private String artifactId;
|
||||
|
||||
private String version;
|
||||
|
||||
private String type;
|
||||
|
||||
private List<ModelProperty> properties;
|
||||
|
||||
private ArtifactModelContainer( List<ModelProperty> properties )
|
||||
{
|
||||
this.properties = new ArrayList<ModelProperty>( properties );
|
||||
this.properties = Collections.unmodifiableList( this.properties );
|
||||
|
||||
for ( ModelProperty mp : properties )
|
||||
{
|
||||
if ( mp.getUri().endsWith( "version" ) )
|
||||
{
|
||||
this.version = mp.getValue();
|
||||
}
|
||||
else if ( mp.getUri().endsWith( "artifactId" ) )
|
||||
{
|
||||
this.artifactId = mp.getValue();
|
||||
}
|
||||
else if ( mp.getUri().endsWith( "groupId" ) )
|
||||
{
|
||||
this.groupId = mp.getValue();
|
||||
}
|
||||
else if ( mp.getUri().equals( ProjectUri.Dependencies.Dependency.type ) )
|
||||
{
|
||||
this.type = mp.getValue();
|
||||
}
|
||||
}
|
||||
if ( groupId == null )
|
||||
{
|
||||
groupId = "org.apache.maven.plugins";
|
||||
// throw new IllegalArgumentException("properties does not contain group id. Artifact ID = "
|
||||
// + artifactId + ", Version = " + version);
|
||||
}
|
||||
|
||||
if ( artifactId == null )
|
||||
{
|
||||
throw new IllegalArgumentException(
|
||||
"Properties does not contain artifact id. Group ID = " + groupId + ", Version = " + version );
|
||||
}
|
||||
|
||||
if ( type == null )
|
||||
{
|
||||
type = "";
|
||||
}
|
||||
}
|
||||
|
||||
public ModelContainerAction containerAction( ModelContainer modelContainer )
|
||||
{
|
||||
if ( modelContainer == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "modelContainer: null" );
|
||||
}
|
||||
|
||||
if ( !( modelContainer instanceof ArtifactModelContainer ) )
|
||||
{
|
||||
throw new IllegalArgumentException( "modelContainer: wrong type" );
|
||||
}
|
||||
|
||||
ArtifactModelContainer c = (ArtifactModelContainer) modelContainer;
|
||||
if ( c.groupId.equals( groupId ) && c.artifactId.equals( artifactId ) )
|
||||
{
|
||||
if ( c.version == null )
|
||||
{
|
||||
if ( version == null )
|
||||
{
|
||||
return ModelContainerAction.JOIN;
|
||||
}
|
||||
return ModelContainerAction.DELETE;//TODO Verify - PluginManagement Section may make versions equal
|
||||
}
|
||||
|
||||
if ( c.version.equals( version ) )
|
||||
{
|
||||
if ( c.type.equals( type ) )
|
||||
{
|
||||
return ModelContainerAction.JOIN;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ModelContainerAction.NOP;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return ModelContainerAction.DELETE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return ModelContainerAction.NOP;
|
||||
}
|
||||
}
|
||||
|
||||
public ModelContainer createNewInstance( List<ModelProperty> modelProperties )
|
||||
{
|
||||
return new ArtifactModelContainer( modelProperties );
|
||||
}
|
||||
|
||||
public List<ModelProperty> getProperties()
|
||||
{
|
||||
return properties;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer sb = new StringBuffer();
|
||||
sb.append( "Group ID = " ).append( groupId ).append( ", Artifact ID = " ).append( artifactId )
|
||||
.append( ", Version" ).append( version ).append( "\r\n" );
|
||||
for ( ModelProperty mp : properties )
|
||||
{
|
||||
sb.append( mp ).append( "\r\n" );
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,113 @@
|
|||
package org.apache.maven.project.builder;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.shared.model.ModelContainer;
|
||||
import org.apache.maven.shared.model.ModelContainerAction;
|
||||
import org.apache.maven.shared.model.ModelContainerFactory;
|
||||
import org.apache.maven.shared.model.ModelProperty;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class IdModelContainerFactory
|
||||
implements ModelContainerFactory
|
||||
{
|
||||
|
||||
private static final Collection<String> uris = Collections.unmodifiableList( Arrays.asList(
|
||||
ProjectUri.PluginRepositories.PluginRepository.xUri, ProjectUri.Repositories.Repository.xUri,
|
||||
ProjectUri.Reporting.Plugins.Plugin.ReportSets.ReportSet.xUri, ProjectUri.Profiles.Profile.xUri,
|
||||
ProjectUri.Build.Plugins.Plugin.Executions.Execution.xUri ) );
|
||||
|
||||
public Collection<String> getUris()
|
||||
{
|
||||
return uris;
|
||||
}
|
||||
|
||||
public ModelContainer create( List<ModelProperty> modelProperties )
|
||||
{
|
||||
if ( modelProperties == null || modelProperties.size() == 0 )
|
||||
{
|
||||
throw new IllegalArgumentException( "modelProperties: null or empty" );
|
||||
}
|
||||
return new IdModelContainer( modelProperties );
|
||||
}
|
||||
|
||||
private static class IdModelContainer
|
||||
implements ModelContainer
|
||||
{
|
||||
|
||||
private String id;
|
||||
|
||||
private List<ModelProperty> properties;
|
||||
|
||||
private IdModelContainer( List<ModelProperty> properties )
|
||||
{
|
||||
this.properties = new ArrayList<ModelProperty>( properties );
|
||||
this.properties = Collections.unmodifiableList( this.properties );
|
||||
|
||||
for ( ModelProperty mp : properties )
|
||||
{
|
||||
if ( mp.getUri().endsWith( "/id" ) )
|
||||
{
|
||||
this.id = mp.getValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ModelContainerAction containerAction( ModelContainer modelContainer )
|
||||
{
|
||||
if ( modelContainer == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "modelContainer: null" );
|
||||
}
|
||||
|
||||
if ( !( modelContainer instanceof IdModelContainer ) )
|
||||
{
|
||||
throw new IllegalArgumentException( "modelContainer: wrong type" );
|
||||
}
|
||||
|
||||
IdModelContainer c = (IdModelContainer) modelContainer;
|
||||
if ( c.id == null || id == null )
|
||||
{
|
||||
return ModelContainerAction.NOP;
|
||||
}
|
||||
return ( c.id.equals( id ) ) ? ModelContainerAction.JOIN : ModelContainerAction.NOP;
|
||||
}
|
||||
|
||||
public ModelContainer createNewInstance( List<ModelProperty> modelProperties )
|
||||
{
|
||||
return new IdModelContainer( modelProperties );
|
||||
}
|
||||
|
||||
public List<ModelProperty> getProperties()
|
||||
{
|
||||
return properties;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
return "ID = " + id;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
package org.apache.maven.project.builder;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
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.ArtifactResolver;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Provides methods for resolving of artifacts.
|
||||
*/
|
||||
public class PomArtifactResolver
|
||||
{
|
||||
|
||||
/**
|
||||
* Local repository used in resolving artifacts
|
||||
*/
|
||||
private ArtifactRepository localRepository;
|
||||
|
||||
/**
|
||||
* Remote repositories used in resolving artifacts
|
||||
*/
|
||||
private List<ArtifactRepository> remoteRepositories;
|
||||
|
||||
/**
|
||||
* Artifact resolver used to resolve artifacts
|
||||
*/
|
||||
private ArtifactResolver resolver;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param localRepository local repository used in resolving artifacts
|
||||
* @param remoteRepositories remote repositories used in resolving artifacts
|
||||
* @param resolver artifact resolver used to resolve artifacts
|
||||
*/
|
||||
public PomArtifactResolver( ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
|
||||
ArtifactResolver resolver )
|
||||
{
|
||||
this.localRepository = localRepository;
|
||||
this.remoteRepositories = remoteRepositories;
|
||||
this.resolver = resolver;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves the specified artifact
|
||||
*
|
||||
* @param artifact the artifact to resolve
|
||||
* @throws IOException if there is a problem resolving the artifact
|
||||
*/
|
||||
public void resolve( Artifact artifact )
|
||||
throws IOException
|
||||
{
|
||||
File artifactFile = new File( localRepository.getBasedir(), localRepository.pathOf( artifact ) );
|
||||
artifact.setFile( artifactFile );
|
||||
|
||||
try
|
||||
{
|
||||
resolver.resolve( artifact, remoteRepositories, localRepository );
|
||||
}
|
||||
catch ( ArtifactResolutionException e )
|
||||
{
|
||||
throw new IOException( e.getMessage() );
|
||||
}
|
||||
catch ( ArtifactNotFoundException e )
|
||||
{
|
||||
throw new IOException( e.getMessage() );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,245 @@
|
|||
package org.apache.maven.project.builder;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Parent;
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
|
||||
import org.apache.maven.shared.model.InputStreamDomainModel;
|
||||
import org.codehaus.plexus.util.IOUtil;
|
||||
import org.codehaus.plexus.util.ReaderFactory;
|
||||
import org.codehaus.plexus.util.WriterFactory;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Writer;
|
||||
|
||||
/**
|
||||
* Provides a wrapper for the maven model.
|
||||
*/
|
||||
public final class PomClassicDomainModel
|
||||
implements InputStreamDomainModel
|
||||
{
|
||||
|
||||
/**
|
||||
* Bytes containing the underlying model
|
||||
*/
|
||||
private byte[] inputBytes;
|
||||
|
||||
/**
|
||||
* History of joins and deletes of model properties
|
||||
*/
|
||||
private String eventHistory;
|
||||
|
||||
/**
|
||||
* Maven model
|
||||
*/
|
||||
private Model model;
|
||||
|
||||
private String id;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param model maven model
|
||||
* @throws IOException if there is a problem constructing the model
|
||||
*/
|
||||
public PomClassicDomainModel( Model model )
|
||||
throws IOException
|
||||
{
|
||||
if ( model == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "model: null" );
|
||||
}
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
Writer out = WriterFactory.newXmlWriter( baos );
|
||||
MavenXpp3Writer writer = new MavenXpp3Writer();
|
||||
writer.write( out, model );
|
||||
out.close();
|
||||
inputBytes = baos.toByteArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param inputStream input stream of the maven model
|
||||
* @throws IOException if there is a problem constructing the model
|
||||
*/
|
||||
public PomClassicDomainModel( InputStream inputStream )
|
||||
throws IOException
|
||||
{
|
||||
if ( inputStream == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "inputStream: null" );
|
||||
}
|
||||
this.inputBytes = IOUtil.toByteArray( inputStream );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns true if groupId.equals(a.groupId) && artifactId.equals(a.artifactId) && version.equals(a.version),
|
||||
* otherwise returns false.
|
||||
*
|
||||
* @param a model to compare
|
||||
* @return true if groupId.equals(a.groupId) && artifactId.equals(a.artifactId) && version.equals(a.version),
|
||||
* otherwise returns false.
|
||||
*/
|
||||
public boolean matchesModel( Model a )
|
||||
{
|
||||
if ( a == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "a: null" );
|
||||
}
|
||||
if ( model == null )
|
||||
{
|
||||
try
|
||||
{
|
||||
model = getModel();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return a.getId().equals( this.getId() );
|
||||
}
|
||||
|
||||
public String getId()
|
||||
{
|
||||
if ( id == null )
|
||||
{
|
||||
if ( model == null )
|
||||
{
|
||||
try
|
||||
{
|
||||
model = getModel();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
return "";
|
||||
}
|
||||
}
|
||||
String groupId = ( model.getGroupId() == null ) ? model.getParent().getGroupId() : model.getGroupId();
|
||||
String artifactId =
|
||||
( model.getArtifactId() == null ) ? model.getParent().getArtifactId() : model.getArtifactId();
|
||||
String version = ( model.getVersion() == null ) ? model.getParent().getVersion() : model.getVersion();
|
||||
|
||||
id = groupId + ":" + artifactId + ":" + version;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
|
||||
|
||||
public boolean matchesParent( Parent parent )
|
||||
{
|
||||
if ( parent == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "parent: null" );
|
||||
}
|
||||
return getId().equals( parent.getGroupId() + ":" + parent.getArtifactId() + ":" + parent.getVersion() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns XML model as string
|
||||
*
|
||||
* @return XML model as string
|
||||
*/
|
||||
public String asString()
|
||||
{
|
||||
try
|
||||
{
|
||||
return IOUtil.toString( ReaderFactory.newXmlReader( new ByteArrayInputStream( inputBytes ) ) );
|
||||
}
|
||||
catch ( IOException ioe )
|
||||
{
|
||||
// should not occur: everything is in-memory
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns maven model
|
||||
*
|
||||
* @return maven model
|
||||
*/
|
||||
public Model getModel()
|
||||
throws IOException
|
||||
{
|
||||
if ( model != null )
|
||||
{
|
||||
return model;
|
||||
}
|
||||
try
|
||||
{
|
||||
return new MavenXpp3Reader().read( ReaderFactory.newXmlReader( new ByteArrayInputStream( inputBytes ) ) );
|
||||
}
|
||||
catch ( XmlPullParserException e )
|
||||
{
|
||||
e.printStackTrace();
|
||||
throw new IOException( e.getMessage() );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.apache.maven.shared.model.InputStreamDomainModel#getInputStream()
|
||||
*/
|
||||
public InputStream getInputStream()
|
||||
{
|
||||
byte[] copy = new byte[inputBytes.length];
|
||||
System.arraycopy( inputBytes, 0, copy, 0, inputBytes.length );
|
||||
return new ByteArrayInputStream( copy );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.apache.maven.shared.model.DomainModel#getEventHistory()
|
||||
*/
|
||||
public String getEventHistory()
|
||||
{
|
||||
return eventHistory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.apache.maven.shared.model.DomainModel#setEventHistory(String)
|
||||
*/
|
||||
public void setEventHistory( String eventHistory )
|
||||
{
|
||||
if ( eventHistory == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "eventHistory: null" );
|
||||
}
|
||||
this.eventHistory = eventHistory;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if this.asString.equals(o.asString()), otherwise false.
|
||||
*
|
||||
* @param o domain model
|
||||
* @return true if this.asString.equals(o.asString()), otherwise false.
|
||||
*/
|
||||
public boolean equals( Object o )
|
||||
{
|
||||
return o instanceof PomClassicDomainModel && getId().equals( ( (PomClassicDomainModel) o ).getId() );
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,418 @@
|
|||
package org.apache.maven.project.builder;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
|
||||
import org.apache.maven.shared.model.DomainModel;
|
||||
import org.apache.maven.shared.model.ModelContainer;
|
||||
import org.apache.maven.shared.model.ModelDataSource;
|
||||
import org.apache.maven.shared.model.ModelMarshaller;
|
||||
import org.apache.maven.shared.model.ModelProperty;
|
||||
import org.apache.maven.shared.model.ModelTransformer;
|
||||
import org.apache.maven.shared.model.impl.DefaultModelDataSource;
|
||||
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* Provides methods for transforming model properties into a domain model for the pom classic format and vice versa.
|
||||
*/
|
||||
public final class PomClassicTransformer
|
||||
implements ModelTransformer
|
||||
{
|
||||
|
||||
/**
|
||||
* The URIs this tranformer supports
|
||||
*/
|
||||
private final Set<String> uris;
|
||||
|
||||
private static Map<String, List<ModelProperty>> cache = new HashMap<String, List<ModelProperty>>();
|
||||
|
||||
//private static List<DomainModel> cache = new ArrayList<DomainModel>();
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
public PomClassicTransformer()
|
||||
{
|
||||
this.uris = new HashSet<String>( Arrays.asList( ProjectUri.Build.Extensions.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.Dependencies.Dependency.Exclusions.xUri,
|
||||
ProjectUri.Build.PluginManagement.Plugins.Plugin.Executions.xUri,
|
||||
ProjectUri.Build.Plugins.xUri,
|
||||
ProjectUri.Build.Plugins.Plugin.configuration,
|
||||
ProjectUri.Build.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Build.Plugins.Plugin.Executions.xUri,
|
||||
ProjectUri.Build.Resources.xUri,
|
||||
ProjectUri.Build.Resources.Resource.includes,
|
||||
ProjectUri.Build.Resources.Resource.excludes,
|
||||
ProjectUri.Build.TestResources.xUri,
|
||||
|
||||
ProjectUri.CiManagement.Notifiers.xUri,
|
||||
|
||||
ProjectUri.Contributors.xUri,
|
||||
|
||||
ProjectUri.Dependencies.xUri,
|
||||
ProjectUri.Dependencies.Dependency.Exclusions.xUri,
|
||||
|
||||
ProjectUri.DependencyManagement.Dependencies.xUri,
|
||||
ProjectUri.DependencyManagement.Dependencies.Dependency.Exclusions.xUri,
|
||||
|
||||
ProjectUri.Developers.xUri,
|
||||
ProjectUri.Developers.Developer.roles, ProjectUri.Licenses.xUri,
|
||||
ProjectUri.MailingLists.xUri, ProjectUri.Modules.xUri,
|
||||
ProjectUri.PluginRepositories.xUri,
|
||||
|
||||
ProjectUri.Profiles.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Plugins.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Plugins.Plugin.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.Resources.xUri,
|
||||
ProjectUri.Profiles.Profile.Build.TestResources.xUri,
|
||||
ProjectUri.Profiles.Profile.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.Dependencies.Dependency.Exclusions.xUri,
|
||||
ProjectUri.Profiles.Profile.DependencyManagement.Dependencies.xUri,
|
||||
ProjectUri.Profiles.Profile.PluginRepositories.xUri,
|
||||
ProjectUri.Profiles.Profile.Reporting.Plugins.xUri,
|
||||
ProjectUri.Profiles.Profile.Repositories.xUri,
|
||||
|
||||
ProjectUri.Reporting.Plugins.xUri,
|
||||
ProjectUri.Reporting.Plugins.Plugin.ReportSets.xUri,
|
||||
|
||||
ProjectUri.Repositories.xUri,
|
||||
|
||||
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins/plugin/dependencies#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins/plugin/dependencies/dependency/exclusions#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins/plugin/executions#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/build/pluginManagement/plugins#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/build/plugins/plugin/dependencies/dependency/exclusions#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/dependencyManagement/dependencies/dependency/exclusions#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/reporting/plugins/plugin/reportSets#collection",
|
||||
"http://apache.org/maven/project/profiles/profile/build/plugins/plugin/executions#collection" ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ModelTransformer#transformToDomainModel(java.util.List)
|
||||
*/
|
||||
public DomainModel transformToDomainModel( List<ModelProperty> properties )
|
||||
throws IOException
|
||||
{
|
||||
if ( properties == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "properties: null" );
|
||||
}
|
||||
|
||||
List<ModelProperty> props = new ArrayList<ModelProperty>();
|
||||
for ( ModelProperty mp : properties )
|
||||
{ //TODO: Resolved values
|
||||
if ( mp.getValue() != null && ( mp.getValue().contains( "=" ) || mp.getValue().contains( "<" ) ) )
|
||||
{
|
||||
props.add( new ModelProperty( mp.getUri(), "<![CDATA[" + mp.getValue() + "]]>" ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
props.add( mp );
|
||||
}
|
||||
}
|
||||
|
||||
String xml = null;
|
||||
try
|
||||
{
|
||||
xml = ModelMarshaller.unmarshalModelPropertiesToXml( props, ProjectUri.baseUri );
|
||||
return new PomClassicDomainModel( new MavenXpp3Reader().read( new StringReader( xml ) ) );
|
||||
}
|
||||
catch ( XmlPullParserException e )
|
||||
{
|
||||
throw new IOException( e + ":\r\n" + xml );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ModelTransformer#transformToModelProperties(java.util.List)
|
||||
*/
|
||||
public List<ModelProperty> transformToModelProperties( List<DomainModel> domainModels )
|
||||
throws IOException
|
||||
{
|
||||
if ( domainModels == null || domainModels.isEmpty() )
|
||||
{
|
||||
throw new IllegalArgumentException( "domainModels: null or empty" );
|
||||
}
|
||||
|
||||
List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
|
||||
List<String> projectNames = new ArrayList<String>();
|
||||
StringBuffer scmUrl = new StringBuffer();
|
||||
StringBuffer scmConnectionUrl = new StringBuffer();
|
||||
StringBuffer scmDeveloperUrl = new StringBuffer();
|
||||
for ( DomainModel domainModel : domainModels )
|
||||
{
|
||||
if ( !( domainModel instanceof PomClassicDomainModel ) )
|
||||
{
|
||||
throw new IllegalArgumentException( "domainModels: Invalid domain model" );
|
||||
}
|
||||
|
||||
PomClassicDomainModel pomDomainModel = (PomClassicDomainModel) domainModel;
|
||||
if ( cache.containsKey( pomDomainModel.getId() ) )
|
||||
{
|
||||
System.out.println( "Found in cache: ID = " + pomDomainModel.getId() );
|
||||
modelProperties.addAll( cache.get( pomDomainModel.getId() ) );
|
||||
continue;
|
||||
}
|
||||
|
||||
List<ModelProperty> tmp = ModelMarshaller.marshallXmlToModelProperties(
|
||||
( (PomClassicDomainModel) domainModel ).getInputStream(), ProjectUri.baseUri, uris );
|
||||
List clearedProperties = new ArrayList<ModelProperty>();
|
||||
|
||||
//Missing Version Rule
|
||||
if ( getPropertyFor( ProjectUri.version, tmp ) == null )
|
||||
{
|
||||
ModelProperty parentVersion = getPropertyFor( ProjectUri.Parent.version, tmp );
|
||||
if ( parentVersion != null )
|
||||
{
|
||||
tmp.add( new ModelProperty( ProjectUri.version, parentVersion.getValue() ) );
|
||||
}
|
||||
}
|
||||
|
||||
//Modules Not Inherited Rule
|
||||
if ( domainModels.indexOf( domainModel ) != 0 )
|
||||
{
|
||||
ModelProperty modulesProperty = getPropertyFor( ProjectUri.Modules.xUri, tmp );
|
||||
if ( modulesProperty != null )
|
||||
{
|
||||
tmp.remove( modulesProperty );
|
||||
tmp.removeAll( getPropertiesFor( ProjectUri.Modules.module, tmp ) );
|
||||
}
|
||||
}
|
||||
|
||||
//Missing groupId, use parent one Rule
|
||||
if ( getPropertyFor( ProjectUri.groupId, tmp ) == null )
|
||||
{
|
||||
ModelProperty parentGroupId = getPropertyFor( ProjectUri.Parent.groupId, tmp );
|
||||
if ( parentGroupId != null )
|
||||
{
|
||||
tmp.add( new ModelProperty( ProjectUri.groupId, parentGroupId.getValue() ) );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Not inherited plugin execution rule
|
||||
if ( domainModels.indexOf( domainModel ) > 0 )
|
||||
{
|
||||
List<ModelProperty> removeProperties = new ArrayList<ModelProperty>();
|
||||
ModelDataSource source = new DefaultModelDataSource();
|
||||
source.init( tmp, Arrays.asList( new ArtifactModelContainerFactory(), new IdModelContainerFactory() ) );
|
||||
List<ModelContainer> containers =
|
||||
source.queryFor( ProjectUri.Build.Plugins.Plugin.Executions.Execution.xUri );
|
||||
for ( ModelContainer container : containers )
|
||||
{
|
||||
for ( ModelProperty mp : container.getProperties() )
|
||||
{
|
||||
if ( mp.getUri().equals( ProjectUri.Build.Plugins.Plugin.Executions.Execution.inherited ) &&
|
||||
mp.getValue() != null && mp.getValue().equals( "false" ) )
|
||||
{
|
||||
removeProperties.addAll( container.getProperties() );
|
||||
for ( int j = tmp.indexOf( mp ); j >= 0; j-- )
|
||||
{
|
||||
if ( tmp.get( j ).getUri().equals( ProjectUri.Build.Plugins.Plugin.Executions.xUri ) )
|
||||
{
|
||||
removeProperties.add( tmp.get( j ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
tmp.removeAll( removeProperties );
|
||||
}
|
||||
//Not inherited plugin rule
|
||||
if ( domainModels.indexOf( domainModel ) > 0 )
|
||||
{
|
||||
List<ModelProperty> removeProperties = new ArrayList<ModelProperty>();
|
||||
ModelDataSource source = new DefaultModelDataSource();
|
||||
source.init( tmp, Arrays.asList( new ArtifactModelContainerFactory(), new IdModelContainerFactory() ) );
|
||||
List<ModelContainer> containers = source.queryFor( ProjectUri.Build.Plugins.Plugin.xUri );
|
||||
for ( ModelContainer container : containers )
|
||||
{
|
||||
for ( ModelProperty mp : container.getProperties() )
|
||||
{
|
||||
if ( mp.getUri().equals( ProjectUri.Build.Plugins.Plugin.inherited ) && mp.getValue() != null &&
|
||||
mp.getValue().equals( "false" ) )
|
||||
{
|
||||
removeProperties.addAll( container.getProperties() );
|
||||
for ( int j = tmp.indexOf( mp ); j >= 0; j-- )
|
||||
{
|
||||
if ( tmp.get( j ).getUri().equals( ProjectUri.Build.Plugins.Plugin.xUri ) )
|
||||
{
|
||||
removeProperties.add( tmp.get( j ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
tmp.removeAll( removeProperties );
|
||||
}
|
||||
|
||||
//SCM Rule
|
||||
ModelProperty scmUrlProperty = getPropertyFor( ProjectUri.Scm.url, tmp );
|
||||
if ( scmUrl.length() == 0 && scmUrlProperty != null )
|
||||
{
|
||||
scmUrl.append( scmUrlProperty.getValue() );
|
||||
for ( String projectName : projectNames )
|
||||
{
|
||||
scmUrl.append( "/" ).append( projectName );
|
||||
}
|
||||
int index = tmp.indexOf( scmUrlProperty );
|
||||
tmp.remove( index );
|
||||
tmp.add( index, new ModelProperty( ProjectUri.Scm.url, scmUrl.toString() ) );
|
||||
}
|
||||
|
||||
//SCM Connection Rule
|
||||
scmUrlProperty = getPropertyFor( ProjectUri.Scm.connection, tmp );
|
||||
if ( scmConnectionUrl.length() == 0 && scmUrlProperty != null )
|
||||
{
|
||||
scmConnectionUrl.append( scmUrlProperty.getValue() );
|
||||
for ( String projectName : projectNames )
|
||||
{
|
||||
scmConnectionUrl.append( "/" ).append( projectName );
|
||||
}
|
||||
int index = tmp.indexOf( scmUrlProperty );
|
||||
tmp.remove( index );
|
||||
tmp.add( index, new ModelProperty( ProjectUri.Scm.connection, scmConnectionUrl.toString() ) );
|
||||
}
|
||||
//SCM Developer Rule
|
||||
scmUrlProperty = getPropertyFor( ProjectUri.Scm.developerConnection, tmp );
|
||||
if ( scmDeveloperUrl.length() == 0 && scmUrlProperty != null )
|
||||
{
|
||||
scmDeveloperUrl.append( scmUrlProperty.getValue() );
|
||||
for ( String projectName : projectNames )
|
||||
{
|
||||
scmDeveloperUrl.append( "/" ).append( projectName );
|
||||
}
|
||||
int index = tmp.indexOf( scmUrlProperty );
|
||||
tmp.remove( index );
|
||||
tmp.add( index, new ModelProperty( ProjectUri.Scm.developerConnection, scmDeveloperUrl.toString() ) );
|
||||
}
|
||||
|
||||
|
||||
//Remove Plugin Repository Inheritance Rule
|
||||
//Project Name Inheritance Rule
|
||||
//Packaging Inheritance Rule
|
||||
//Build Resources Inheritence Rule
|
||||
//Build Test Resources Inheritance Rule
|
||||
//Profiles not inherited rule
|
||||
for ( ModelProperty mp : tmp )
|
||||
{
|
||||
String uri = mp.getUri();
|
||||
if ( domainModels.indexOf( domainModel ) > 0 && ( uri.equals( ProjectUri.name ) ||
|
||||
uri.equals( ProjectUri.packaging ) || uri.startsWith( ProjectUri.Profiles.xUri ) ||
|
||||
uri.startsWith( ProjectUri.Build.Resources.xUri ) ||
|
||||
uri.startsWith( ProjectUri.Build.TestResources.xUri ) ||
|
||||
uri.startsWith( ProjectUri.PluginRepositories.xUri ) ) )
|
||||
{
|
||||
clearedProperties.add( mp );
|
||||
}
|
||||
}
|
||||
ModelProperty artifactId = getPropertyFor( ProjectUri.artifactId, tmp );
|
||||
if ( artifactId != null )
|
||||
{
|
||||
projectNames.add( 0, artifactId.getValue() );
|
||||
}
|
||||
|
||||
tmp.removeAll( clearedProperties );
|
||||
modelProperties.addAll( tmp );
|
||||
|
||||
if ( domainModels.indexOf( domainModel ) > 0 )
|
||||
{
|
||||
//cache.put( pomDomainModel.getId(), modelProperties );
|
||||
}
|
||||
|
||||
//Remove Parent Info
|
||||
/*
|
||||
for (ModelProperty mp : tmp) {
|
||||
if (mp.getUri().startsWith(ProjectUri.Parent.xUri)) {
|
||||
modelProperties.remove(mp);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
return modelProperties;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base uri of all model properties: http://apache.org/maven/project/
|
||||
*
|
||||
* @return Returns the base uri of all model properties: http://apache.org/maven/project/
|
||||
*/
|
||||
public String getBaseUri()
|
||||
{
|
||||
return ProjectUri.baseUri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all model properties containing the specified uri from the specified properties list.
|
||||
*
|
||||
* @param uri the uri to use in finding the returned model properties
|
||||
* @param properties the model properties list to search
|
||||
* @return all model properties containing the specified uri from the specified properties list
|
||||
*/
|
||||
private static List<ModelProperty> getPropertiesFor( String uri, List<ModelProperty> properties )
|
||||
{
|
||||
List<ModelProperty> modelProperties = new ArrayList<ModelProperty>();
|
||||
for ( ModelProperty mp : properties )
|
||||
{
|
||||
if ( uri.equals( mp.getUri() ) )
|
||||
{
|
||||
modelProperties.add( mp );
|
||||
}
|
||||
}
|
||||
return modelProperties;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the first model property containing the specified uri from the specified properties list.
|
||||
*
|
||||
* @param uri the uri to use in finding the returned model property
|
||||
* @param properties the model properties list to search
|
||||
* @return the first model property containing the specified uri from the specified properties list.
|
||||
*/
|
||||
private static ModelProperty getPropertyFor( String uri, List<ModelProperty> properties )
|
||||
{
|
||||
for ( ModelProperty mp : properties )
|
||||
{
|
||||
if ( uri.equals( mp.getUri() ) )
|
||||
{
|
||||
return mp;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,56 @@
|
|||
package org.apache.maven.project.builder;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.shared.model.InterpolatorProperty;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Provides services for building maven projects from models.
|
||||
*/
|
||||
public interface ProjectBuilder
|
||||
{
|
||||
|
||||
String ROLE = ProjectBuilder.class.getName();
|
||||
|
||||
/**
|
||||
* Returns a maven project for the specified input stream.
|
||||
*
|
||||
* @param pom input stream of the model
|
||||
* @param inheritedModels list of models containing additional parent models in order from most to least specialized
|
||||
* @param interpolatorProperties properties used for interpolation of properties within the model
|
||||
* @param resolver artifact resolver used in resolving artifacts
|
||||
* @param baseDirectory the base directory of the model
|
||||
* @return a maven project for the specified input stream
|
||||
* @throws IOException if there is a problem in the construction of the maven project
|
||||
*/
|
||||
MavenProject buildFromLocalPath( InputStream pom, List<Model> inheritedModels,
|
||||
Collection<InterpolatorProperty> interpolatorProperties,
|
||||
PomArtifactResolver resolver, File baseDirectory )
|
||||
throws IOException;
|
||||
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,295 @@
|
|||
package org.apache.maven.project.builder.impl;
|
||||
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.apache.maven.artifact.factory.ArtifactFactory;
|
||||
import org.apache.maven.model.Model;
|
||||
import org.apache.maven.model.Parent;
|
||||
import org.apache.maven.project.MavenProject;
|
||||
import org.apache.maven.project.builder.ArtifactModelContainerFactory;
|
||||
import org.apache.maven.project.builder.IdModelContainerFactory;
|
||||
import org.apache.maven.project.builder.PomArtifactResolver;
|
||||
import org.apache.maven.project.builder.PomClassicDomainModel;
|
||||
import org.apache.maven.project.builder.PomClassicTransformer;
|
||||
import org.apache.maven.project.builder.ProjectBuilder;
|
||||
import org.apache.maven.project.validation.ModelValidationResult;
|
||||
import org.apache.maven.project.validation.ModelValidator;
|
||||
import org.apache.maven.shared.model.DomainModel;
|
||||
import org.apache.maven.shared.model.InterpolatorProperty;
|
||||
import org.apache.maven.shared.model.ModelTransformerContext;
|
||||
import org.codehaus.plexus.logging.LogEnabled;
|
||||
import org.codehaus.plexus.logging.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Default implementation of the project builder.
|
||||
*/
|
||||
public final class DefaultProjectBuilder
|
||||
implements ProjectBuilder, LogEnabled
|
||||
{
|
||||
|
||||
private ArtifactFactory artifactFactory;
|
||||
|
||||
/**
|
||||
* Logger instance
|
||||
*/
|
||||
private Logger logger;
|
||||
|
||||
private ModelValidator validator;
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
public DefaultProjectBuilder()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param artifactFactory the artifact factory
|
||||
*/
|
||||
protected DefaultProjectBuilder( ArtifactFactory artifactFactory )
|
||||
{
|
||||
if ( artifactFactory == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "artifactFactory: null" );
|
||||
}
|
||||
this.artifactFactory = artifactFactory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see ProjectBuilder#buildFromLocalPath(java.io.InputStream, java.util.List, java.util.Collection, org.apache.maven.project.builder.PomArtifactResolver, java.io.File)
|
||||
*/
|
||||
public MavenProject buildFromLocalPath( InputStream pom, List<Model> inheritedModels,
|
||||
Collection<InterpolatorProperty> interpolatorProperties,
|
||||
PomArtifactResolver resolver, File projectDirectory )
|
||||
throws IOException
|
||||
{
|
||||
if ( pom == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "pom: null" );
|
||||
}
|
||||
|
||||
if ( resolver == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "resolver: null" );
|
||||
}
|
||||
|
||||
if ( projectDirectory == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "projectDirectory: null" );
|
||||
}
|
||||
|
||||
if ( inheritedModels == null )
|
||||
{
|
||||
inheritedModels = new ArrayList<Model>();
|
||||
}
|
||||
else
|
||||
{
|
||||
inheritedModels = new ArrayList<Model>( inheritedModels );
|
||||
Collections.reverse( inheritedModels );
|
||||
}
|
||||
|
||||
List<InterpolatorProperty> properties;
|
||||
if ( interpolatorProperties == null )
|
||||
{
|
||||
properties = new ArrayList<InterpolatorProperty>();
|
||||
}
|
||||
else
|
||||
{
|
||||
properties = new ArrayList<InterpolatorProperty>( interpolatorProperties );
|
||||
}
|
||||
|
||||
PomClassicDomainModel domainModel = new PomClassicDomainModel( pom );
|
||||
List<DomainModel> domainModels = new ArrayList<DomainModel>();
|
||||
domainModels.add( domainModel );
|
||||
|
||||
if ( domainModel.getModel().getParent() != null )
|
||||
{
|
||||
if ( isParentLocal( domainModel.getModel().getParent(), projectDirectory ) )
|
||||
{
|
||||
domainModels.addAll( getDomainModelParentsFromLocalPath( domainModel, resolver, projectDirectory ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
domainModels.addAll( getDomainModelParentsFromRepository( domainModel, resolver ) );
|
||||
}
|
||||
}
|
||||
|
||||
for ( Model model : inheritedModels )
|
||||
{
|
||||
domainModels.add( new PomClassicDomainModel( model ) );
|
||||
}
|
||||
|
||||
PomClassicTransformer transformer = new PomClassicTransformer();
|
||||
ModelTransformerContext ctx = new ModelTransformerContext(
|
||||
Arrays.asList( new ArtifactModelContainerFactory(), new IdModelContainerFactory() ) );
|
||||
|
||||
PomClassicDomainModel transformedDomainModel =
|
||||
( (PomClassicDomainModel) ctx.transform( domainModels, transformer, transformer, properties ) );
|
||||
Model model = transformedDomainModel.getModel();
|
||||
return new MavenProject( model );
|
||||
}
|
||||
|
||||
private boolean isParentLocal( Parent parent, File projectDirectory )
|
||||
{
|
||||
try
|
||||
{
|
||||
File f = new File( projectDirectory, parent.getRelativePath() ).getCanonicalFile();
|
||||
if ( f.isDirectory() )
|
||||
{
|
||||
f = new File( f, "pom.xml" );
|
||||
}
|
||||
return f.exists();
|
||||
}
|
||||
catch ( IOException e )
|
||||
{
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private List<DomainModel> getDomainModelParentsFromRepository( PomClassicDomainModel domainModel,
|
||||
PomArtifactResolver artifactResolver )
|
||||
throws IOException
|
||||
{
|
||||
if ( artifactFactory == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "artifactFactory: not initialized" );
|
||||
}
|
||||
|
||||
List<DomainModel> domainModels = new ArrayList<DomainModel>();
|
||||
|
||||
Parent parent = domainModel.getModel().getParent();
|
||||
|
||||
if ( parent == null )
|
||||
{
|
||||
return domainModels;
|
||||
}
|
||||
|
||||
Artifact artifactParent =
|
||||
artifactFactory.createParentArtifact( parent.getGroupId(), parent.getArtifactId(), parent.getVersion() );
|
||||
artifactResolver.resolve( artifactParent );
|
||||
|
||||
PomClassicDomainModel parentDomainModel =
|
||||
new PomClassicDomainModel( new FileInputStream( artifactParent.getFile() ) );
|
||||
if ( !parentDomainModel.matchesParent( domainModel.getModel().getParent() ) )
|
||||
{
|
||||
logger.warn( "Parent pom ids do not match: File = " + artifactParent.getFile().getAbsolutePath() );
|
||||
return domainModels;
|
||||
}
|
||||
else
|
||||
{
|
||||
// logger.info("Adding pom to hierarchy: Group Id = " + parent.getGroupId() + ", Artifact Id ="
|
||||
// + parent.getArtifactId() + ", Version = " + parent.getVersion() + ", File" + artifactParent.getFile());
|
||||
}
|
||||
|
||||
domainModels.add( parentDomainModel );
|
||||
domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver ) );
|
||||
return domainModels;
|
||||
}
|
||||
|
||||
|
||||
private List<DomainModel> getDomainModelParentsFromLocalPath( PomClassicDomainModel domainModel,
|
||||
PomArtifactResolver artifactResolver,
|
||||
File projectDirectory )
|
||||
throws IOException
|
||||
{
|
||||
|
||||
if ( artifactFactory == null )
|
||||
{
|
||||
throw new IllegalArgumentException( "artifactFactory: not initialized" );
|
||||
}
|
||||
|
||||
List<DomainModel> domainModels = new ArrayList<DomainModel>();
|
||||
|
||||
Parent parent = domainModel.getModel().getParent();
|
||||
|
||||
if ( parent == null )
|
||||
{
|
||||
return domainModels;
|
||||
}
|
||||
|
||||
Model model = domainModel.getModel();
|
||||
|
||||
File parentFile = new File( projectDirectory, model.getParent().getRelativePath() ).getCanonicalFile();
|
||||
if ( parentFile.isDirectory() )
|
||||
{
|
||||
parentFile = new File( parentFile.getAbsolutePath(), "pom.xml" );
|
||||
}
|
||||
|
||||
if ( !parentFile.exists() )
|
||||
{
|
||||
throw new IOException( "File does not exist: File =" + parentFile.getAbsolutePath() );
|
||||
}
|
||||
|
||||
PomClassicDomainModel parentDomainModel = new PomClassicDomainModel( new FileInputStream( parentFile ) );
|
||||
if ( !parentDomainModel.matchesParent( domainModel.getModel().getParent() ) )
|
||||
{
|
||||
logger.warn( "Parent pom ids do not match: File = " + parentFile.getAbsolutePath() );
|
||||
}
|
||||
|
||||
domainModels.add( parentDomainModel );
|
||||
if ( parentDomainModel.getModel().getParent() != null )
|
||||
{
|
||||
if ( isParentLocal( parentDomainModel.getModel().getParent(), parentFile.getParentFile() ) )
|
||||
{
|
||||
domainModels.addAll( getDomainModelParentsFromLocalPath( parentDomainModel, artifactResolver,
|
||||
parentFile.getParentFile() ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
domainModels.addAll( getDomainModelParentsFromRepository( parentDomainModel, artifactResolver ) );
|
||||
}
|
||||
}
|
||||
|
||||
return domainModels;
|
||||
}
|
||||
|
||||
|
||||
public void enableLogging( Logger logger )
|
||||
{
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
private void validateModel( Model model )
|
||||
throws IOException
|
||||
{
|
||||
ModelValidationResult validationResult = validator.validate( model );
|
||||
|
||||
if ( validationResult.getMessageCount() > 0 )
|
||||
{
|
||||
throw new IOException( "Failed to validate: " + validationResult.toString() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -110,11 +110,24 @@ under the License.
|
|||
|
|
||||
|
|
||||
-->
|
||||
<component>
|
||||
<role>org.apache.maven.project.builder.ProjectBuilder</role>
|
||||
<role-hint>default</role-hint>
|
||||
<implementation>org.apache.maven.project.builder.impl.DefaultProjectBuilder</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.project.MavenProjectBuilder</role>
|
||||
<role-hint>default</role-hint>
|
||||
<implementation>org.apache.maven.project.DefaultMavenProjectBuilder</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.builder.ProjectBuilder</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.workspace.ProjectWorkspace</role>
|
||||
</requirement>
|
||||
|
|
|
@ -69,12 +69,12 @@ public class ProjectInheritanceTest
|
|||
System.out.println( "Child SCM developer connection is: "
|
||||
+ project1.getScm().getDeveloperConnection() );
|
||||
|
||||
assertEquals( project1.getScm().getUrl(), project0.getScm().getUrl() + "/modules/p1" );
|
||||
assertEquals( project1.getScm().getUrl(), project0.getScm().getUrl() + "/p1" );
|
||||
assertEquals( project1.getScm().getConnection(), project0.getScm().getConnection()
|
||||
+ "/modules/p1" );
|
||||
+ "/p1" );
|
||||
assertEquals( project1.getScm().getDeveloperConnection(), project0.getScm()
|
||||
.getDeveloperConnection()
|
||||
+ "/modules/p1" );
|
||||
+ "/p1" );
|
||||
}
|
||||
|
||||
public void testScmInfoCalculatedCorrectlyOnChildOnlyRead()
|
||||
|
@ -93,10 +93,10 @@ public class ProjectInheritanceTest
|
|||
System.out.println( "Child SCM developer connection is: "
|
||||
+ project1.getScm().getDeveloperConnection() );
|
||||
|
||||
assertEquals( project1.getScm().getUrl(), "http://host/viewer?path=/p0/modules/p1" );
|
||||
assertEquals( project1.getScm().getConnection(), "scm:svn:http://host/p0/modules/p1" );
|
||||
assertEquals( project1.getScm().getUrl(), "http://host/viewer?path=/p0/p1" );
|
||||
assertEquals( project1.getScm().getConnection(), "scm:svn:http://host/p0/p1" );
|
||||
assertEquals( project1.getScm().getDeveloperConnection(),
|
||||
"scm:svn:https://host/p0/modules/p1" );
|
||||
"scm:svn:https://host/p0/p1" );
|
||||
}
|
||||
|
||||
// public void testScmInfoCalculatedCorrectlyOnChildReadFromLocalRepository()
|
||||
|
|
|
@ -75,11 +75,24 @@ under the License.
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.project.builder.ProjectBuilder</role>
|
||||
<role-hint>default</role-hint>
|
||||
<implementation>org.apache.maven.project.builder.impl.DefaultProjectBuilder</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.project.MavenProjectBuilder</role>
|
||||
<role-hint>test</role-hint>
|
||||
<implementation>org.apache.maven.project.TestProjectBuilder</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.builder.ProjectBuilder</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.workspace.ProjectWorkspace</role>
|
||||
</requirement>
|
||||
|
|
|
@ -73,11 +73,24 @@ under the License.
|
|||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.project.builder.ProjectBuilder</role>
|
||||
<role-hint>default</role-hint>
|
||||
<implementation>org.apache.maven.project.builder.impl.DefaultProjectBuilder</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.artifact.factory.ArtifactFactory</role>
|
||||
</requirement>
|
||||
</requirements>
|
||||
</component>
|
||||
<component>
|
||||
<role>org.apache.maven.project.MavenProjectBuilder</role>
|
||||
<role-hint>test</role-hint>
|
||||
<implementation>org.apache.maven.project.TestProjectBuilder</implementation>
|
||||
<requirements>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.builder.ProjectBuilder</role>
|
||||
</requirement>
|
||||
<requirement>
|
||||
<role>org.apache.maven.project.workspace.ProjectWorkspace</role>
|
||||
</requirement>
|
||||
|
|
15
pom.xml
15
pom.xml
|
@ -32,7 +32,8 @@
|
|||
publication, and distribution publication are all controlled from
|
||||
the declarative file. Maven can be extended by plugins to utilise a
|
||||
number of other development tools for reporting or the build
|
||||
process. </description>
|
||||
process.
|
||||
</description>
|
||||
<url>http://maven.apache.org/</url>
|
||||
<inceptionYear>2001</inceptionYear>
|
||||
<issueManagement>
|
||||
|
@ -271,6 +272,8 @@
|
|||
<plexusInterpolationVersion>1.1</plexusInterpolationVersion>
|
||||
<plexusUtilsVersion>1.5.5</plexusUtilsVersion>
|
||||
<wagonVersion>1.0-beta-3</wagonVersion>
|
||||
<mavenSharedModel>1.0-SNAPSHOT</mavenSharedModel>
|
||||
<woodstoxVersion>3.2.6</woodstoxVersion>
|
||||
</properties>
|
||||
|
||||
<!--start-->
|
||||
|
@ -404,6 +407,16 @@
|
|||
<artifactId>doxia-sink-api</artifactId>
|
||||
<version>${doxiaVersion}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.maven.shared</groupId>
|
||||
<artifactId>maven-shared-model</artifactId>
|
||||
<version>${mavenSharedModel}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.codehaus.woodstox</groupId>
|
||||
<artifactId>wstx-asl</artifactId>
|
||||
<version>${woodstoxVersion}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>easymock</groupId>
|
||||
<artifactId>easymock</artifactId>
|
||||
|
|
Loading…
Reference in New Issue