You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2010/07/11 15:51:21 UTC
svn commit: r963073 - in /maven/maven-3/trunk/maven-model-builder/src:
main/java/org/apache/maven/model/building/
test/java/org/apache/maven/model/building/ test/resources/poms/factory/
Author: bentmann
Date: Sun Jul 11 13:51:21 2010
New Revision: 963073
URL: http://svn.apache.org/viewvc?rev=963073&view=rev
Log:
o Added a factory to manually wire/setup a model builder for convenient use in non-ioc envs
Added:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java (with props)
maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java (with props)
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/ (with props)
maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml (with props)
Modified:
maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
Added: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java?rev=963073&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java (added)
+++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java Sun Jul 11 13:51:21 2010
@@ -0,0 +1,242 @@
+package org.apache.maven.model.building;
+
+/*
+ * 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.composition.DefaultDependencyManagementImporter;
+import org.apache.maven.model.composition.DependencyManagementImporter;
+import org.apache.maven.model.inheritance.DefaultInheritanceAssembler;
+import org.apache.maven.model.inheritance.InheritanceAssembler;
+import org.apache.maven.model.interpolation.ModelInterpolator;
+import org.apache.maven.model.interpolation.StringSearchModelInterpolator;
+import org.apache.maven.model.io.DefaultModelReader;
+import org.apache.maven.model.io.ModelReader;
+import org.apache.maven.model.locator.DefaultModelLocator;
+import org.apache.maven.model.locator.ModelLocator;
+import org.apache.maven.model.management.DefaultDependencyManagementInjector;
+import org.apache.maven.model.management.DefaultPluginManagementInjector;
+import org.apache.maven.model.management.DependencyManagementInjector;
+import org.apache.maven.model.management.PluginManagementInjector;
+import org.apache.maven.model.normalization.DefaultModelNormalizer;
+import org.apache.maven.model.normalization.ModelNormalizer;
+import org.apache.maven.model.path.DefaultModelPathTranslator;
+import org.apache.maven.model.path.DefaultModelUrlNormalizer;
+import org.apache.maven.model.path.DefaultPathTranslator;
+import org.apache.maven.model.path.DefaultUrlNormalizer;
+import org.apache.maven.model.path.ModelPathTranslator;
+import org.apache.maven.model.path.ModelUrlNormalizer;
+import org.apache.maven.model.path.PathTranslator;
+import org.apache.maven.model.path.UrlNormalizer;
+import org.apache.maven.model.plugin.DefaultPluginConfigurationExpander;
+import org.apache.maven.model.plugin.DefaultReportConfigurationExpander;
+import org.apache.maven.model.plugin.DefaultReportingConverter;
+import org.apache.maven.model.plugin.LifecycleBindingsInjector;
+import org.apache.maven.model.plugin.PluginConfigurationExpander;
+import org.apache.maven.model.plugin.ReportConfigurationExpander;
+import org.apache.maven.model.plugin.ReportingConverter;
+import org.apache.maven.model.profile.DefaultProfileInjector;
+import org.apache.maven.model.profile.DefaultProfileSelector;
+import org.apache.maven.model.profile.ProfileInjector;
+import org.apache.maven.model.profile.ProfileSelector;
+import org.apache.maven.model.profile.activation.FileProfileActivator;
+import org.apache.maven.model.profile.activation.JdkVersionProfileActivator;
+import org.apache.maven.model.profile.activation.OperatingSystemProfileActivator;
+import org.apache.maven.model.profile.activation.ProfileActivator;
+import org.apache.maven.model.profile.activation.PropertyProfileActivator;
+import org.apache.maven.model.superpom.DefaultSuperPomProvider;
+import org.apache.maven.model.superpom.SuperPomProvider;
+import org.apache.maven.model.validation.DefaultModelValidator;
+import org.apache.maven.model.validation.ModelValidator;
+
+/**
+ * A factory to create model builder instances when no dependency injection is available. <em>Note:</em> This class is
+ * only meant as a utility for developers that want to employ the model builder outside of the Maven build system, Maven
+ * plugins should always acquire model builder instances via dependency injection. Developers might want to subclass
+ * this factory to provide custom implementations for some of the components used by the model builder.
+ *
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelBuilderFactory
+{
+
+ protected ModelProcessor newModelProcessor()
+ {
+ DefaultModelProcessor processor = new DefaultModelProcessor();
+ processor.setModelLocator( newModelLocator() );
+ processor.setModelReader( newModelReader() );
+ return processor;
+ }
+
+ protected ModelLocator newModelLocator()
+ {
+ return new DefaultModelLocator();
+ }
+
+ protected ModelReader newModelReader()
+ {
+ return new DefaultModelReader();
+ }
+
+ protected ProfileSelector newProfileSelector()
+ {
+ DefaultProfileSelector profileSelector = new DefaultProfileSelector();
+
+ for ( ProfileActivator activator : newProfileActivators() )
+ {
+ profileSelector.addProfileActivator( activator );
+ }
+
+ return profileSelector;
+ }
+
+ protected ProfileActivator[] newProfileActivators()
+ {
+ return new ProfileActivator[] { new JdkVersionProfileActivator(), new OperatingSystemProfileActivator(),
+ new PropertyProfileActivator(), new FileProfileActivator() };
+ }
+
+ protected UrlNormalizer newUrlNormalizer()
+ {
+ return new DefaultUrlNormalizer();
+ }
+
+ protected PathTranslator newPathTranslator()
+ {
+ return new DefaultPathTranslator();
+ }
+
+ protected ModelInterpolator newModelInterpolator()
+ {
+ UrlNormalizer urlNormalizer = newUrlNormalizer();
+ PathTranslator pathTranslator = newPathTranslator();
+ return new StringSearchModelInterpolator().setPathTranslator( pathTranslator ).setUrlNormalizer( urlNormalizer );
+ }
+
+ protected ModelValidator newModelValidator()
+ {
+ return new DefaultModelValidator();
+ }
+
+ protected ModelNormalizer newModelNormalizer()
+ {
+ return new DefaultModelNormalizer();
+ }
+
+ protected ModelPathTranslator newModelPathTranslator()
+ {
+ return new DefaultModelPathTranslator().setPathTranslator( newPathTranslator() );
+ }
+
+ protected ModelUrlNormalizer newModelUrlNormalizer()
+ {
+ return new DefaultModelUrlNormalizer().setUrlNormalizer( newUrlNormalizer() );
+ }
+
+ protected InheritanceAssembler newInheritanceAssembler()
+ {
+ return new DefaultInheritanceAssembler();
+ }
+
+ protected ProfileInjector newProfileInjector()
+ {
+ return new DefaultProfileInjector();
+ }
+
+ protected SuperPomProvider newSuperPomProvider()
+ {
+ return new DefaultSuperPomProvider().setModelProcessor( newModelProcessor() );
+ }
+
+ protected DependencyManagementImporter newDependencyManagementImporter()
+ {
+ return new DefaultDependencyManagementImporter();
+ }
+
+ protected DependencyManagementInjector newDependencyManagementInjector()
+ {
+ return new DefaultDependencyManagementInjector();
+ }
+
+ protected LifecycleBindingsInjector newLifecycleBindingsInjector()
+ {
+ return new StubLifecycleBindingsInjector();
+ }
+
+ protected PluginManagementInjector newPluginManagementInjector()
+ {
+ return new DefaultPluginManagementInjector();
+ }
+
+ protected PluginConfigurationExpander newPluginConfigurationExpander()
+ {
+ return new DefaultPluginConfigurationExpander();
+ }
+
+ protected ReportConfigurationExpander newReportConfigurationExpander()
+ {
+ return new DefaultReportConfigurationExpander();
+ }
+
+ protected ReportingConverter newReportingConverter()
+ {
+ return new DefaultReportingConverter();
+ }
+
+ /**
+ * Creates a new model builder instance.
+ *
+ * @return The new model builder instance, never {@code null}.
+ */
+ public DefaultModelBuilder newInstance()
+ {
+ DefaultModelBuilder modelBuilder = new DefaultModelBuilder();
+
+ modelBuilder.setModelProcessor( newModelProcessor() );
+ modelBuilder.setModelValidator( newModelValidator() );
+ modelBuilder.setModelNormalizer( newModelNormalizer() );
+ modelBuilder.setModelPathTranslator( newModelPathTranslator() );
+ modelBuilder.setModelUrlNormalizer( newModelUrlNormalizer() );
+ modelBuilder.setModelInterpolator( newModelInterpolator() );
+ modelBuilder.setInheritanceAssembler( newInheritanceAssembler() );
+ modelBuilder.setProfileInjector( newProfileInjector() );
+ modelBuilder.setProfileSelector( newProfileSelector() );
+ modelBuilder.setSuperPomProvider( newSuperPomProvider() );
+ modelBuilder.setDependencyManagementImporter( newDependencyManagementImporter() );
+ modelBuilder.setDependencyManagementInjector( newDependencyManagementInjector() );
+ modelBuilder.setLifecycleBindingsInjector( newLifecycleBindingsInjector() );
+ modelBuilder.setPluginManagementInjector( newPluginManagementInjector() );
+ modelBuilder.setPluginConfigurationExpander( newPluginConfigurationExpander() );
+ modelBuilder.setReportConfigurationExpander( newReportConfigurationExpander() );
+ modelBuilder.setReportingConverter( newReportingConverter() );
+
+ return modelBuilder;
+ }
+
+ private static class StubLifecycleBindingsInjector
+ implements LifecycleBindingsInjector
+ {
+
+ public void injectLifecycleBindings( Model model, ModelBuildingRequest request, ModelProblemCollector problems )
+ {
+ }
+
+ }
+
+}
Propchange: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java?rev=963073&r1=963072&r2=963073&view=diff
==============================================================================
--- maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java (original)
+++ maven/maven-3/trunk/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingListener.java Sun Jul 11 13:51:21 2010
@@ -22,6 +22,8 @@ package org.apache.maven.model.building;
/**
* Defines events that the model builder fires during construction of the effective model. When a listener encounteres
* errors while processing the event, it can report these problems via {@link ModelBuildingEvent#getProblems()}.
+ * <em>Note:</em> To cope with future extensions to this interface, it is strongly recommended to extend
+ * {@link AbstractModelBuildingListener} rather than to directly implement this interface.
*
* @author Benjamin Bentmann
*/
Added: maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java?rev=963073&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java (added)
+++ maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java Sun Jul 11 13:51:21 2010
@@ -0,0 +1,53 @@
+package org.apache.maven.model.building;
+
+/*
+ * 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 java.io.File;
+
+import junit.framework.TestCase;
+
+/**
+ * @author Benjamin Bentmann
+ */
+public class DefaultModelBuilderFactoryTest
+ extends TestCase
+{
+
+ private File getPom( String name )
+ {
+ return new File( "src/test/resources/poms/factory/" + name + ".xml" ).getAbsoluteFile();
+ }
+
+ public void testCompleteWiring()
+ throws Exception
+ {
+ ModelBuilder builder = new DefaultModelBuilderFactory().newInstance();
+ assertNotNull( builder );
+
+ DefaultModelBuildingRequest request = new DefaultModelBuildingRequest();
+ request.setProcessPlugins( true );
+ request.setPomFile( getPom( "simple" ) );
+
+ ModelBuildingResult result = builder.build( request );
+ assertNotNull( result );
+ assertNotNull( result.getEffectiveModel() );
+ }
+
+}
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/java/org/apache/maven/model/building/DefaultModelBuilderFactoryTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/
------------------------------------------------------------------------------
bugtraq:label = Enter issue ID:
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/
------------------------------------------------------------------------------
bugtraq:message = Issue id: %BUGID%
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/
------------------------------------------------------------------------------
bugtraq:number = false
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/
------------------------------------------------------------------------------
bugtraq:url = http://jira.codehaus.org/browse/%BUGID%
Added: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml
URL: http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml?rev=963073&view=auto
==============================================================================
--- maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml (added)
+++ maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml Sun Jul 11 13:51:21 2010
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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.
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>test</groupId>
+ <artifactId>test</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>test</id>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+ </profile>
+ </profiles>
+</project>
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/maven-3/trunk/maven-model-builder/src/test/resources/poms/factory/simple.xml
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision