mirror of https://github.com/apache/maven.git
copy maven-toolchains project into components trunk.
git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@632585 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a5f49900f2
commit
5377165201
|
@ -0,0 +1,86 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven</artifactId>
|
||||||
|
<version>2.0.6</version>
|
||||||
|
</parent>
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>maven-toolchain</artifactId>
|
||||||
|
<name>Maven Toolchains</name>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<url>http://maven.apache.org</url>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-core</artifactId>
|
||||||
|
<version>2.0.6</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.maven</groupId>
|
||||||
|
<artifactId>maven-artifact</artifactId>
|
||||||
|
<version>2.0.6</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.modello</groupId>
|
||||||
|
<artifactId>modello-maven-plugin</artifactId>
|
||||||
|
<version>1.0-alpha-14</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>java</goal>
|
||||||
|
<goal>xsd</goal>
|
||||||
|
<goal>xpp3-reader</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<version>1.0.0</version>
|
||||||
|
<packageWithVersion>false</packageWithVersion>
|
||||||
|
<model>src/main/mdo/toolchains.xml</model>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<version>1.0-alpha-15</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>shading</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<artifactSet>
|
||||||
|
<includes>
|
||||||
|
<include>${project.groupId}:${project.artifactId}</include>
|
||||||
|
</includes>
|
||||||
|
</artifactSet>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>org.codehaus.plexus.util</pattern>
|
||||||
|
<excludes>
|
||||||
|
<exclude>org.codehaus.plexus.util.xml.Xpp3Dom</exclude>
|
||||||
|
<exclude>org.codehaus.plexus.util.xml.pull.*</exclude>
|
||||||
|
</excludes>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,102 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
|
import org.codehaus.plexus.logging.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public abstract class DefaultToolchain
|
||||||
|
implements Toolchain, ToolchainPrivate
|
||||||
|
{
|
||||||
|
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
private Map provides = new HashMap /*<String,RequirementMatcher>*/ ( );
|
||||||
|
|
||||||
|
public static final String KEY_TYPE = "type"; //NOI18N
|
||||||
|
|
||||||
|
private ToolchainModel model;
|
||||||
|
|
||||||
|
private Logger logger;
|
||||||
|
|
||||||
|
protected DefaultToolchain( ToolchainModel model, Logger logger )
|
||||||
|
{
|
||||||
|
this.model = model;
|
||||||
|
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected DefaultToolchain( ToolchainModel model, String type, Logger logger )
|
||||||
|
{
|
||||||
|
this( model, logger );
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final String getType( )
|
||||||
|
{
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public final ToolchainModel getModel( )
|
||||||
|
{
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void addProvideToken( String type,
|
||||||
|
RequirementMatcher matcher )
|
||||||
|
{
|
||||||
|
provides.put( type, matcher );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean matchesRequirements(Map requirements) {
|
||||||
|
Iterator it = requirements.keySet().iterator();
|
||||||
|
while ( it.hasNext() )
|
||||||
|
{
|
||||||
|
String key = (String) it.next();
|
||||||
|
|
||||||
|
RequirementMatcher matcher = (RequirementMatcher) provides.get(key);
|
||||||
|
|
||||||
|
if ( matcher == null )
|
||||||
|
{
|
||||||
|
getLog().debug( "Toolchain " + this + " is missing required property: " + key );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ( !matcher.matches( (String) requirements.get(key) ) )
|
||||||
|
{
|
||||||
|
getLog().debug( "Toolchain " + this + " doesn't match required property: " + key );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Logger getLog() {
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,239 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import java.io.BufferedInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.maven.execution.MavenSession;
|
||||||
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
|
import org.apache.maven.project.MavenProject;
|
||||||
|
import org.apache.maven.toolchain.model.PersistedToolchains;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
|
import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
|
||||||
|
import org.codehaus.plexus.PlexusConstants;
|
||||||
|
import org.codehaus.plexus.PlexusContainer;
|
||||||
|
import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
|
||||||
|
import org.codehaus.plexus.context.Context;
|
||||||
|
import org.codehaus.plexus.context.ContextException;
|
||||||
|
import org.codehaus.plexus.logging.AbstractLogEnabled;
|
||||||
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public class DefaultToolchainManager extends AbstractLogEnabled
|
||||||
|
implements ToolchainManager,
|
||||||
|
ToolchainManagerPrivate,
|
||||||
|
Contextualizable
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @component
|
||||||
|
*/
|
||||||
|
private PlexusContainer container;
|
||||||
|
|
||||||
|
public DefaultToolchainManager( )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public void contextualize( Context context )
|
||||||
|
throws ContextException
|
||||||
|
{
|
||||||
|
container = (PlexusContainer) context.get(PlexusConstants.PLEXUS_KEY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToolchainPrivate[] getToolchainsForType( String type )
|
||||||
|
throws MisconfiguredToolchainException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
PersistedToolchains pers = readToolchainSettings ();
|
||||||
|
Map factories = container.lookupMap( ToolchainFactory.ROLE );
|
||||||
|
List toRet = new ArrayList( );
|
||||||
|
if ( pers != null )
|
||||||
|
{
|
||||||
|
List lst = pers.getToolchains();
|
||||||
|
if ( lst != null )
|
||||||
|
{
|
||||||
|
Iterator it = lst.iterator();
|
||||||
|
while ( it.hasNext() )
|
||||||
|
{
|
||||||
|
ToolchainModel toolchainModel = (ToolchainModel) it.next();
|
||||||
|
ToolchainFactory fact = (ToolchainFactory) factories.get( toolchainModel.getType() );
|
||||||
|
if ( fact != null )
|
||||||
|
{
|
||||||
|
toRet.add( fact.createToolchain( toolchainModel ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getLogger().error("Missing toolchain factory for type:" + toolchainModel.getType() + ". Possibly caused by misconfigured project.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Iterator it = factories.values().iterator();
|
||||||
|
while ( it.hasNext() )
|
||||||
|
{
|
||||||
|
ToolchainFactory fact = (ToolchainFactory) it.next();
|
||||||
|
ToolchainPrivate tool = fact.createDefaultToolchain();
|
||||||
|
if ( tool != null )
|
||||||
|
{
|
||||||
|
toRet.add( tool );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ToolchainPrivate[] tc = new ToolchainPrivate[ toRet.size() ];
|
||||||
|
return (ToolchainPrivate[]) toRet.toArray(tc);
|
||||||
|
}
|
||||||
|
catch ( ComponentLookupException ex )
|
||||||
|
{
|
||||||
|
getLogger().fatalError("Error in component lookup", ex);
|
||||||
|
}
|
||||||
|
return new ToolchainPrivate[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
public Toolchain getToolchainFromBuildContext( String type,
|
||||||
|
MavenSession session )
|
||||||
|
{
|
||||||
|
Map context = retrieveContext(session);
|
||||||
|
if ( "javac".equals( type ))
|
||||||
|
{
|
||||||
|
//HACK to make compiler plugin happy
|
||||||
|
type = "jdk";
|
||||||
|
}
|
||||||
|
Object obj = context.get( getStorageKey( type ) );
|
||||||
|
ToolchainModel model = (ToolchainModel)obj;
|
||||||
|
|
||||||
|
if ( model != null )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ToolchainFactory fact = (ToolchainFactory) container.lookup(ToolchainFactory.ROLE, type);
|
||||||
|
return fact.createToolchain( model );
|
||||||
|
}
|
||||||
|
catch ( ComponentLookupException ex )
|
||||||
|
{
|
||||||
|
getLogger().fatalError("Error in component lookup", ex);
|
||||||
|
}
|
||||||
|
catch ( MisconfiguredToolchainException ex )
|
||||||
|
{
|
||||||
|
getLogger().error("Misconfigured toolchain.", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private MavenProject getCurrentProject(MavenSession session) {
|
||||||
|
//use reflection since MavenSession.getCurrentProject() is not part of 3.0.8
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Method meth = session.getClass().getMethod("getCurrentProject", new Class[0]);
|
||||||
|
return (MavenProject) meth.invoke(session, null);
|
||||||
|
} catch (Exception ex)
|
||||||
|
{
|
||||||
|
//just ignore, we're running in pre- 3.0.9
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map retrieveContext( MavenSession session )
|
||||||
|
{
|
||||||
|
if (session == null)
|
||||||
|
{
|
||||||
|
return new HashMap();
|
||||||
|
}
|
||||||
|
PluginDescriptor desc = new PluginDescriptor();
|
||||||
|
desc.setGroupId( PluginDescriptor.getDefaultPluginGroupId() );
|
||||||
|
desc.setArtifactId( PluginDescriptor.getDefaultPluginArtifactId ("toolchains") );
|
||||||
|
MavenProject current = getCurrentProject(session);
|
||||||
|
if ( current != null )
|
||||||
|
{
|
||||||
|
return session.getPluginContext( desc, current );
|
||||||
|
|
||||||
|
}
|
||||||
|
return new HashMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void storeToolchainToBuildContext( ToolchainPrivate toolchain,
|
||||||
|
MavenSession session )
|
||||||
|
{
|
||||||
|
Map context = retrieveContext( session );
|
||||||
|
context.put( getStorageKey( toolchain.getType() ), toolchain.getModel () );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String getStorageKey( String type )
|
||||||
|
{
|
||||||
|
return "toolchain-" + type; //NOI18N
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private PersistedToolchains readToolchainSettings( )
|
||||||
|
throws MisconfiguredToolchainException
|
||||||
|
{
|
||||||
|
//TODO how to point to the local path?
|
||||||
|
File tch = new File( System.getProperty( "user.home" ),
|
||||||
|
".m2/toolchains.xml" );
|
||||||
|
if ( tch.exists() )
|
||||||
|
{
|
||||||
|
MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
|
||||||
|
InputStreamReader in = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
in = new InputStreamReader( new BufferedInputStream( new FileInputStream( tch ) ) );
|
||||||
|
return reader.read( in );
|
||||||
|
}
|
||||||
|
catch ( Exception ex )
|
||||||
|
{
|
||||||
|
throw new MisconfiguredToolchainException( "Cannot read toolchains file at " + tch.getAbsolutePath( ),
|
||||||
|
ex );
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (in != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
in.close();
|
||||||
|
}
|
||||||
|
catch (IOException ex)
|
||||||
|
{ }
|
||||||
|
}
|
||||||
|
// IOUtil.close( in );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//TODO log the fact that no toolchains file was found.
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public class MisconfiguredToolchainException
|
||||||
|
extends Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
public MisconfiguredToolchainException( String message )
|
||||||
|
{
|
||||||
|
super( message );
|
||||||
|
}
|
||||||
|
|
||||||
|
public MisconfiguredToolchainException( String message,
|
||||||
|
Throwable orig )
|
||||||
|
{
|
||||||
|
super( message, orig );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public interface RequirementMatcher
|
||||||
|
{
|
||||||
|
|
||||||
|
boolean matches( String requirement );
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
|
||||||
|
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
|
||||||
|
import org.apache.maven.artifact.versioning.VersionRange;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public final class RequirementMatcherFactory
|
||||||
|
{
|
||||||
|
|
||||||
|
private RequirementMatcherFactory( )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequirementMatcher createExactMatcher( String provideValue )
|
||||||
|
{
|
||||||
|
return new ExactMatcher( provideValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static RequirementMatcher createVersionMatcher( String provideValue )
|
||||||
|
{
|
||||||
|
return new VersionMatcher( provideValue );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class ExactMatcher
|
||||||
|
implements RequirementMatcher
|
||||||
|
{
|
||||||
|
|
||||||
|
private String provides;
|
||||||
|
|
||||||
|
private ExactMatcher( String provides )
|
||||||
|
{
|
||||||
|
this.provides = provides;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean matches( String requirement )
|
||||||
|
{
|
||||||
|
return provides.equalsIgnoreCase( requirement );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final class VersionMatcher
|
||||||
|
implements RequirementMatcher
|
||||||
|
{
|
||||||
|
|
||||||
|
DefaultArtifactVersion version;
|
||||||
|
|
||||||
|
private VersionMatcher( String version )
|
||||||
|
{
|
||||||
|
this.version = new DefaultArtifactVersion(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean matches( String requirement )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
VersionRange range = VersionRange.createFromVersionSpec(requirement);
|
||||||
|
if (range.hasRestrictions()) {
|
||||||
|
return range.containsVersion(version);
|
||||||
|
} else {
|
||||||
|
return range.getRecommendedVersion().compareTo(version) == 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (InvalidVersionSpecificationException ex)
|
||||||
|
{
|
||||||
|
//TODO error reporting
|
||||||
|
ex.printStackTrace();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Milos Kleint
|
||||||
|
* @author Jason van Zyl
|
||||||
|
*/
|
||||||
|
public interface Toolchain
|
||||||
|
{
|
||||||
|
|
||||||
|
String getType( );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the platform tool executable.
|
||||||
|
*
|
||||||
|
* @param toolName the tool platform independent tool name.
|
||||||
|
* @return file representing the tool executable, or null if the tool can not be found
|
||||||
|
*/
|
||||||
|
String findTool( String toolName );
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public interface ToolchainFactory
|
||||||
|
{
|
||||||
|
|
||||||
|
String ROLE = ToolchainFactory.class.getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create instance of toolchain.
|
||||||
|
**/
|
||||||
|
ToolchainPrivate createToolchain( ToolchainModel model )
|
||||||
|
throws MisconfiguredToolchainException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the default instance of the particular type of toolchain, can return null
|
||||||
|
* if not applicable.
|
||||||
|
* TODO keep around??
|
||||||
|
**/
|
||||||
|
ToolchainPrivate createDefaultToolchain( );
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import org.apache.maven.execution.MavenSession;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public interface ToolchainManager
|
||||||
|
{
|
||||||
|
|
||||||
|
String ROLE = ToolchainManager.class.getName();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* to be used from plugins capable of working with toolchains.
|
||||||
|
*/
|
||||||
|
Toolchain getToolchainFromBuildContext( String type,
|
||||||
|
MavenSession context );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import org.apache.maven.execution.MavenSession;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component for use by the maven-toolchains-plugin only.
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public interface ToolchainManagerPrivate
|
||||||
|
{
|
||||||
|
String ROLE = ToolchainManagerPrivate.class.getName();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the toolchains of given type from the user settings.
|
||||||
|
*/
|
||||||
|
ToolchainPrivate[] getToolchainsForType( String type )
|
||||||
|
throws MisconfiguredToolchainException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores the toolchain into build context.
|
||||||
|
*/
|
||||||
|
void storeToolchainToBuildContext( ToolchainPrivate toolchain,
|
||||||
|
MavenSession context );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* a private contract between the toolchains plugin and the components.
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public interface ToolchainPrivate
|
||||||
|
extends Toolchain
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Let the toolchain decide if it matches requirements defined
|
||||||
|
* in the toolchain plugin configuration.
|
||||||
|
* @param requirements Map<String, String> key value pair
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
boolean matchesRequirements( Map requirements);
|
||||||
|
|
||||||
|
ToolchainModel getModel( );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain.java;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import org.apache.maven.toolchain.DefaultToolchain;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
|
import org.codehaus.plexus.logging.Logger;
|
||||||
|
import org.codehaus.plexus.util.FileUtils;
|
||||||
|
import org.codehaus.plexus.util.Os;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Milos Kleint
|
||||||
|
*/
|
||||||
|
public class DefaultJavaToolChain
|
||||||
|
extends DefaultToolchain
|
||||||
|
implements JavaToolChain
|
||||||
|
{
|
||||||
|
|
||||||
|
private String javaHome;
|
||||||
|
|
||||||
|
public static final String KEY_JAVAHOME = "jdkHome"; //NOI18N
|
||||||
|
|
||||||
|
public DefaultJavaToolChain( ToolchainModel model, Logger logger )
|
||||||
|
{
|
||||||
|
super( model, "jdk", logger );
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaHome( )
|
||||||
|
{
|
||||||
|
return javaHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJavaHome( String javaHome )
|
||||||
|
{
|
||||||
|
this.javaHome = javaHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString( )
|
||||||
|
{
|
||||||
|
return "JDK[" + getJavaHome( ) + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String findTool( String toolName )
|
||||||
|
{
|
||||||
|
File toRet = findTool( toolName,
|
||||||
|
new File( FileUtils.normalize( getJavaHome( ) ) ) );
|
||||||
|
if ( toRet != null )
|
||||||
|
{
|
||||||
|
return toRet.getAbsolutePath( );
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static File findTool( String toolName, File installFolder )
|
||||||
|
{
|
||||||
|
File bin = new File( installFolder, "bin" ); //NOI18N
|
||||||
|
if ( bin.exists( ) )
|
||||||
|
{
|
||||||
|
File tool = new File( bin,
|
||||||
|
toolName + (Os.isFamily( "windows" ) ? ".exe" : "") ); //NOI18N
|
||||||
|
if ( tool.exists( ) )
|
||||||
|
{
|
||||||
|
return tool;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain.java;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import org.apache.maven.toolchain.MisconfiguredToolchainException;
|
||||||
|
import org.apache.maven.toolchain.RequirementMatcherFactory;
|
||||||
|
import org.apache.maven.toolchain.ToolchainFactory;
|
||||||
|
import org.apache.maven.toolchain.ToolchainPrivate;
|
||||||
|
import org.apache.maven.toolchain.model.ToolchainModel;
|
||||||
|
import org.codehaus.plexus.logging.LogEnabled;
|
||||||
|
import org.codehaus.plexus.logging.Logger;
|
||||||
|
import org.codehaus.plexus.util.FileUtils;
|
||||||
|
import org.codehaus.plexus.util.xml.Xpp3Dom;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public class DefaultJavaToolchainFactory
|
||||||
|
implements ToolchainFactory, LogEnabled
|
||||||
|
{
|
||||||
|
|
||||||
|
private Logger logger;
|
||||||
|
|
||||||
|
public DefaultJavaToolchainFactory( )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToolchainPrivate createToolchain( ToolchainModel model )
|
||||||
|
throws MisconfiguredToolchainException
|
||||||
|
{
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
DefaultJavaToolChain jtc = new DefaultJavaToolChain( model , logger);
|
||||||
|
Xpp3Dom dom = (Xpp3Dom) model.getConfiguration();
|
||||||
|
Xpp3Dom javahome = dom.getChild( DefaultJavaToolChain.KEY_JAVAHOME );
|
||||||
|
if ( javahome == null )
|
||||||
|
{
|
||||||
|
throw new MisconfiguredToolchainException( "Java toolchain without the " + DefaultJavaToolChain.KEY_JAVAHOME + " configuration element." );
|
||||||
|
}
|
||||||
|
File normal = new File( FileUtils.normalize( javahome.getValue() ) );
|
||||||
|
if ( normal.exists() )
|
||||||
|
{
|
||||||
|
jtc.setJavaHome( FileUtils.normalize( javahome.getValue() ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new MisconfiguredToolchainException( "Non-existing JDK home configuration at " + normal.getAbsolutePath( ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
//now populate the provides section.
|
||||||
|
//TODO possibly move at least parts to a utility method or abstract implementation.
|
||||||
|
dom = (Xpp3Dom) model.getProvides();
|
||||||
|
Xpp3Dom[] provides = dom.getChildren();
|
||||||
|
for ( int i = 0; i < provides.length; i++ )
|
||||||
|
{
|
||||||
|
String key = provides[i].getName();
|
||||||
|
String value = provides[i].getValue();
|
||||||
|
if ( value == null )
|
||||||
|
{
|
||||||
|
throw new MisconfiguredToolchainException( "Provides token '" + key + "' doesn't have any value configured." );
|
||||||
|
}
|
||||||
|
if ( "version".equals( key ) )
|
||||||
|
{
|
||||||
|
jtc.addProvideToken( key,
|
||||||
|
RequirementMatcherFactory.createVersionMatcher( value ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
jtc.addProvideToken( key,
|
||||||
|
RequirementMatcherFactory.createExactMatcher( value ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return jtc;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToolchainPrivate createDefaultToolchain()
|
||||||
|
{
|
||||||
|
//not sure it's necessary to provide a default toolchain here.
|
||||||
|
//only version can be eventually supplied, and
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Logger getLogger()
|
||||||
|
{
|
||||||
|
return logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableLogging( Logger logger )
|
||||||
|
{
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,65 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain.java;
|
||||||
|
|
||||||
|
import org.apache.maven.toolchain.Toolchain;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Jason van Zyl
|
||||||
|
* @author Milos Kleint
|
||||||
|
*/
|
||||||
|
public interface JavaToolChain
|
||||||
|
extends Toolchain
|
||||||
|
{
|
||||||
|
// /**
|
||||||
|
// * Returns a list of {@link java.io.File}s which represents the bootstrap libraries for the
|
||||||
|
// * runtime environment. The Bootstrap libraries include libraries in JRE's
|
||||||
|
// * extension directory, if there are any.
|
||||||
|
// *
|
||||||
|
// * @return List
|
||||||
|
// */
|
||||||
|
// List getBootstrapLibraries();
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns a list of {@link java.io.File}s which represent the libraries recognized by
|
||||||
|
// * default by the platform. Usually it corresponds to contents of CLASSPATH
|
||||||
|
// * environment variable.
|
||||||
|
// *
|
||||||
|
// * @return List
|
||||||
|
// */
|
||||||
|
// List getStandardLibraries();
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns a {@link java.io.File}s which represent the locations of the source of the JDK,
|
||||||
|
// * or an empty collection when the location is not set or is invalid.
|
||||||
|
// *
|
||||||
|
// * @return List
|
||||||
|
// */
|
||||||
|
// List getSourceDirectories();
|
||||||
|
//
|
||||||
|
// /**
|
||||||
|
// * Returns a {@link java.io.File}s which represent the locations of the Javadoc for this platform,
|
||||||
|
// * or empty collection if the location is not set or invalid
|
||||||
|
// *
|
||||||
|
// * @return List
|
||||||
|
// */
|
||||||
|
// List getJavadocFolders();
|
||||||
|
}
|
|
@ -0,0 +1,79 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
|
||||||
|
-->
|
||||||
|
<model>
|
||||||
|
<id>maven-toolchains</id>
|
||||||
|
<name>MavenToolchains</name>
|
||||||
|
<description><![CDATA[
|
||||||
|
|
||||||
|
]]></description>
|
||||||
|
<defaults>
|
||||||
|
<default>
|
||||||
|
<key>package</key>
|
||||||
|
<value>org.apache.maven.toolchain.model</value>
|
||||||
|
</default>
|
||||||
|
</defaults>
|
||||||
|
<classes>
|
||||||
|
<class rootElement="true" xml.tagName="toolchains" xsd.compositor="sequence">
|
||||||
|
<name>PersistedToolchains</name>
|
||||||
|
<description><![CDATA[
|
||||||
|
The <code><project></code> element is the root of the descriptor.
|
||||||
|
The following table lists all of the possible child elements.
|
||||||
|
]]></description>
|
||||||
|
<version>1.0.0+</version>
|
||||||
|
<fields>
|
||||||
|
<field xml.listStyle="flat">
|
||||||
|
<name>toolchains</name>
|
||||||
|
<version>1.0.0+</version>
|
||||||
|
<description><![CDATA[The toolchain definition.]]></description>
|
||||||
|
<association>
|
||||||
|
<type>ToolchainModel</type>
|
||||||
|
<multiplicity>*</multiplicity>
|
||||||
|
</association>
|
||||||
|
</field>
|
||||||
|
</fields>
|
||||||
|
</class>
|
||||||
|
<class>
|
||||||
|
<name>ToolchainModel</name>
|
||||||
|
<version>1.0.0+</version>
|
||||||
|
<fields>
|
||||||
|
<field>
|
||||||
|
<name>type</name>
|
||||||
|
<version>1.0.0+</version>
|
||||||
|
<description>
|
||||||
|
<![CDATA[Type of toolchain]]></description>
|
||||||
|
<type>String</type>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>provides</name>
|
||||||
|
<version>1.0.0+</version>
|
||||||
|
<type>DOM</type>
|
||||||
|
</field>
|
||||||
|
<field>
|
||||||
|
<name>configuration</name>
|
||||||
|
<version>1.0.0+</version>
|
||||||
|
<type>DOM</type>
|
||||||
|
</field>
|
||||||
|
</fields>
|
||||||
|
</class>
|
||||||
|
</classes>
|
||||||
|
</model>
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
<!--
|
||||||
|
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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<component-set>
|
||||||
|
<components>
|
||||||
|
<component>
|
||||||
|
<role>org.apache.maven.toolchain.ToolchainManager</role>
|
||||||
|
<implementation>org.apache.maven.toolchain.DefaultToolchainManager</implementation>
|
||||||
|
</component>
|
||||||
|
<!--- TODO do I really need to define 2 components? I'd rather have 1 istance shared for both lookups. -->
|
||||||
|
<component>
|
||||||
|
<role>org.apache.maven.toolchain.ToolchainManagerPrivate</role>
|
||||||
|
<implementation>org.apache.maven.toolchain.DefaultToolchainManager</implementation>
|
||||||
|
</component>
|
||||||
|
<component>
|
||||||
|
<role>org.apache.maven.toolchain.ToolchainFactory</role>
|
||||||
|
<role-hint>jdk</role-hint>
|
||||||
|
<implementation>org.apache.maven.toolchain.java.DefaultJavaToolchainFactory</implementation>
|
||||||
|
</component>
|
||||||
|
|
||||||
|
<!-- make sure the compiler-plugin gets the jdk toolchain -->
|
||||||
|
<component>
|
||||||
|
<role>org.apache.maven.toolchain.ToolchainFactory</role>
|
||||||
|
<role-hint>javac</role-hint>
|
||||||
|
<implementation>org.apache.maven.toolchain.java.DefaultJavaToolchainFactory</implementation>
|
||||||
|
</component>
|
||||||
|
</components>
|
||||||
|
</component-set>
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.apache.maven.toolchain;
|
||||||
|
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author mkleint
|
||||||
|
*/
|
||||||
|
public class RequirementMatcherFactoryTest extends TestCase {
|
||||||
|
|
||||||
|
public RequirementMatcherFactoryTest(String testName) {
|
||||||
|
super(testName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test of createExactMatcher method, of class RequirementMatcherFactory.
|
||||||
|
*/
|
||||||
|
public void testCreateExactMatcher() {
|
||||||
|
RequirementMatcher matcher;
|
||||||
|
matcher = RequirementMatcherFactory.createExactMatcher("foo");
|
||||||
|
assertFalse(matcher.matches("bar"));
|
||||||
|
assertFalse(matcher.matches("foobar"));
|
||||||
|
assertFalse(matcher.matches("foob"));
|
||||||
|
assertTrue(matcher.matches("foo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test of createVersionMatcher method, of class RequirementMatcherFactory.
|
||||||
|
*/
|
||||||
|
public void testCreateVersionMatcher() {
|
||||||
|
RequirementMatcher matcher;
|
||||||
|
matcher = RequirementMatcherFactory.createVersionMatcher("1.5.2");
|
||||||
|
assertFalse(matcher.matches("1.5"));
|
||||||
|
assertTrue(matcher.matches("1.5.2"));
|
||||||
|
assertFalse(matcher.matches("[1.4,1.5)"));
|
||||||
|
assertFalse(matcher.matches("[1.5,1.5.2)"));
|
||||||
|
assertFalse(matcher.matches("(1.5.2,1.6)"));
|
||||||
|
assertTrue(matcher.matches("(1.4,1.5.2]"));
|
||||||
|
assertTrue(matcher.matches("(1.5,)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue