mirror of https://github.com/apache/maven.git
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/maven
This commit is contained in:
commit
b4a7780350
|
@ -176,7 +176,7 @@ public class DefaultArtifactVersion
|
||||||
if ( tok.hasMoreTokens() )
|
if ( tok.hasMoreTokens() )
|
||||||
{
|
{
|
||||||
qualifier = tok.nextToken();
|
qualifier = tok.nextToken();
|
||||||
fallback = Pattern.compile("\\d+").matcher( qualifier ).matches();
|
fallback = Pattern.compile( "\\d+" ).matcher( qualifier ).matches();
|
||||||
}
|
}
|
||||||
|
|
||||||
// string tokenzier won't detect these and ignores them
|
// string tokenzier won't detect these and ignores them
|
||||||
|
|
|
@ -91,7 +91,7 @@ public enum ArtifactScopeEnum
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final ArtifactScopeEnum [][][] _compliancySets = {
|
private static final ArtifactScopeEnum [][][] COMPLIANCY_SETS = {
|
||||||
{ { compile }, { compile, provided, system } }
|
{ { compile }, { compile, provided, system } }
|
||||||
, { { test }, { compile, test, provided, system } }
|
, { { test }, { compile, test, provided, system } }
|
||||||
, { { runtime }, { compile, runtime, system } }
|
, { { runtime }, { compile, runtime, system } }
|
||||||
|
@ -114,7 +114,7 @@ public enum ArtifactScopeEnum
|
||||||
return scope.id == system.id;
|
return scope.id == system.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( ArtifactScopeEnum[][] set : _compliancySets )
|
for ( ArtifactScopeEnum[][] set : COMPLIANCY_SETS )
|
||||||
{
|
{
|
||||||
if ( id == set[0][0].id )
|
if ( id == set[0][0].id )
|
||||||
{
|
{
|
||||||
|
|
|
@ -320,7 +320,7 @@ public class DefaultMaven
|
||||||
{
|
{
|
||||||
afterSessionEnd( projects, session );
|
afterSessionEnd( projects, session );
|
||||||
}
|
}
|
||||||
catch (MavenExecutionException e)
|
catch ( MavenExecutionException e )
|
||||||
{
|
{
|
||||||
return addExceptionToResult( result, e );
|
return addExceptionToResult( result, e );
|
||||||
}
|
}
|
||||||
|
@ -349,7 +349,7 @@ public class DefaultMaven
|
||||||
{
|
{
|
||||||
afterSessionEnd( projects, session );
|
afterSessionEnd( projects, session );
|
||||||
}
|
}
|
||||||
catch (MavenExecutionException e)
|
catch ( MavenExecutionException e )
|
||||||
{
|
{
|
||||||
return addExceptionToResult( result, e );
|
return addExceptionToResult( result, e );
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,11 +31,11 @@ import org.apache.maven.plugin.MojoExecutionException;
|
||||||
*/
|
*/
|
||||||
public interface MojoExecutionListener
|
public interface MojoExecutionListener
|
||||||
{
|
{
|
||||||
public void beforeMojoExecution( MojoExecutionEvent event )
|
void beforeMojoExecution( MojoExecutionEvent event )
|
||||||
throws MojoExecutionException;
|
throws MojoExecutionException;
|
||||||
|
|
||||||
public void afterMojoExecutionSuccess( MojoExecutionEvent event )
|
void afterMojoExecutionSuccess( MojoExecutionEvent event )
|
||||||
throws MojoExecutionException;
|
throws MojoExecutionException;
|
||||||
|
|
||||||
public void afterExecutionFailure( MojoExecutionEvent event );
|
void afterExecutionFailure( MojoExecutionEvent event );
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,14 +31,14 @@ import org.apache.maven.lifecycle.LifecycleExecutionException;
|
||||||
*/
|
*/
|
||||||
public interface ProjectExecutionListener
|
public interface ProjectExecutionListener
|
||||||
{
|
{
|
||||||
public void beforeProjectExecution( ProjectExecutionEvent event )
|
void beforeProjectExecution( ProjectExecutionEvent event )
|
||||||
throws LifecycleExecutionException;
|
throws LifecycleExecutionException;
|
||||||
|
|
||||||
public void beforeProjectLifecycleExecution( ProjectExecutionEvent event )
|
void beforeProjectLifecycleExecution( ProjectExecutionEvent event )
|
||||||
throws LifecycleExecutionException;
|
throws LifecycleExecutionException;
|
||||||
|
|
||||||
public void afterProjectExecutionSuccess( ProjectExecutionEvent event )
|
void afterProjectExecutionSuccess( ProjectExecutionEvent event )
|
||||||
throws LifecycleExecutionException;
|
throws LifecycleExecutionException;
|
||||||
|
|
||||||
public void afterProjectExecutionFailure( ProjectExecutionEvent event );
|
void afterProjectExecutionFailure( ProjectExecutionEvent event );
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,6 @@ package org.apache.maven.execution;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import org.apache.maven.artifact.ArtifactUtils;
|
import org.apache.maven.artifact.ArtifactUtils;
|
||||||
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
import org.apache.maven.project.DuplicateProjectException;
|
import org.apache.maven.project.DuplicateProjectException;
|
||||||
|
@ -29,7 +28,6 @@ import org.codehaus.plexus.util.dag.CycleDetectedException;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -49,9 +47,9 @@ public class ReactorManager
|
||||||
// make projects that depend on me, and projects that I depend on
|
// make projects that depend on me, and projects that I depend on
|
||||||
public static final String MAKE_BOTH_MODE = "make-both";
|
public static final String MAKE_BOTH_MODE = "make-both";
|
||||||
|
|
||||||
private List blackList = new ArrayList();
|
private List<String> blackList = new ArrayList<String>();
|
||||||
|
|
||||||
private Map buildFailuresByProject = new HashMap();
|
private Map<String, BuildFailure> buildFailuresByProject = new HashMap<String, BuildFailure>();
|
||||||
|
|
||||||
private Map pluginContextsByProjectAndPluginKey = new HashMap();
|
private Map pluginContextsByProjectAndPluginKey = new HashMap();
|
||||||
|
|
||||||
|
@ -59,9 +57,9 @@ public class ReactorManager
|
||||||
|
|
||||||
private final ProjectSorter sorter;
|
private final ProjectSorter sorter;
|
||||||
|
|
||||||
private Map buildSuccessesByProject = new HashMap();
|
private Map<String, BuildSuccess> buildSuccessesByProject = new HashMap<String, BuildSuccess>();
|
||||||
|
|
||||||
public ReactorManager( List projects )
|
public ReactorManager( List<MavenProject> projects )
|
||||||
throws CycleDetectedException, DuplicateProjectException
|
throws CycleDetectedException, DuplicateProjectException
|
||||||
{
|
{
|
||||||
this.sorter = new ProjectSorter( projects );
|
this.sorter = new ProjectSorter( projects );
|
||||||
|
@ -123,16 +121,14 @@ public class ReactorManager
|
||||||
{
|
{
|
||||||
blackList.add( id );
|
blackList.add( id );
|
||||||
|
|
||||||
List dependents = sorter.getDependents( id );
|
List<String> dependents = sorter.getDependents( id );
|
||||||
|
|
||||||
if ( dependents != null && !dependents.isEmpty() )
|
if ( dependents != null && !dependents.isEmpty() )
|
||||||
{
|
{
|
||||||
for ( Object dependent : dependents )
|
for ( String dependentId : dependents )
|
||||||
{
|
{
|
||||||
String dependentId = (String) dependent;
|
if ( !buildSuccessesByProject.containsKey( dependentId )
|
||||||
|
&& !buildFailuresByProject.containsKey( dependentId ) )
|
||||||
if ( !buildSuccessesByProject.containsKey( dependentId ) && !buildFailuresByProject.containsKey(
|
|
||||||
dependentId ) )
|
|
||||||
{
|
{
|
||||||
blackList( dependentId );
|
blackList( dependentId );
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,11 +35,11 @@ import org.apache.maven.plugin.MojoExecutionException;
|
||||||
*/
|
*/
|
||||||
public interface WeakMojoExecutionListener
|
public interface WeakMojoExecutionListener
|
||||||
{
|
{
|
||||||
public void beforeMojoExecution( MojoExecutionEvent event )
|
void beforeMojoExecution( MojoExecutionEvent event )
|
||||||
throws MojoExecutionException;
|
throws MojoExecutionException;
|
||||||
|
|
||||||
public void afterMojoExecutionSuccess( MojoExecutionEvent event )
|
void afterMojoExecutionSuccess( MojoExecutionEvent event )
|
||||||
throws MojoExecutionException;
|
throws MojoExecutionException;
|
||||||
|
|
||||||
public void afterExecutionFailure( MojoExecutionEvent event );
|
void afterExecutionFailure( MojoExecutionEvent event );
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
package org.apache.maven.lifecycle.internal;
|
package org.apache.maven.lifecycle.internal;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
@ -11,7 +30,7 @@ public class BuildThreadFactory
|
||||||
{
|
{
|
||||||
private final AtomicInteger ID = new AtomicInteger();
|
private final AtomicInteger ID = new AtomicInteger();
|
||||||
|
|
||||||
private String PREFIX = "BuilderThread";
|
private static final String PREFIX = "BuilderThread";
|
||||||
|
|
||||||
public Thread newThread( Runnable r )
|
public Thread newThread( Runnable r )
|
||||||
{
|
{
|
||||||
|
|
|
@ -145,12 +145,14 @@ public class ProjectBuildList
|
||||||
/**
|
/**
|
||||||
* @return a set of all the projects managed by the build
|
* @return a set of all the projects managed by the build
|
||||||
*/
|
*/
|
||||||
public Set<MavenProject> getProjects() {
|
public Set<MavenProject> getProjects()
|
||||||
Set<MavenProject> projects = new HashSet<MavenProject>();
|
{
|
||||||
|
Set<MavenProject> projects = new HashSet<MavenProject>();
|
||||||
for (ProjectSegment s : items) {
|
|
||||||
projects.add(s.getProject());
|
for ( ProjectSegment s : items )
|
||||||
}
|
{
|
||||||
return projects;
|
projects.add( s.getProject() );
|
||||||
}
|
}
|
||||||
|
return projects;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
package org.apache.maven.lifecycle.internal.builder;
|
package org.apache.maven.lifecycle.internal.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 java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
|
@ -22,7 +41,7 @@ public interface Builder
|
||||||
// Be nice to whittle this down to Session, maybe add task segments to the session. The session really is the
|
// Be nice to whittle this down to Session, maybe add task segments to the session. The session really is the
|
||||||
// the place to store reactor related information.
|
// the place to store reactor related information.
|
||||||
//
|
//
|
||||||
public void build( MavenSession session, ReactorContext reactorContext, ProjectBuildList projectBuilds,
|
void build( MavenSession session, ReactorContext reactorContext, ProjectBuildList projectBuilds,
|
||||||
List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
|
List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
|
||||||
throws ExecutionException, InterruptedException;
|
throws ExecutionException, InterruptedException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,29 @@
|
||||||
package org.apache.maven.lifecycle.internal.builder;
|
package org.apache.maven.lifecycle.internal.builder;
|
||||||
|
|
||||||
public class BuilderNotFoundException extends Exception
|
/*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class BuilderNotFoundException
|
||||||
|
extends Exception
|
||||||
{
|
{
|
||||||
public BuilderNotFoundException(String message)
|
public BuilderNotFoundException( String message )
|
||||||
{
|
{
|
||||||
super(message);
|
super( message );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,8 @@ import org.codehaus.plexus.logging.Logger;
|
||||||
* NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
|
* NOTE: This class is not part of any public api and can be changed or deleted without prior notice.
|
||||||
*/
|
*/
|
||||||
@Component( role = Builder.class, hint = "multithreaded" )
|
@Component( role = Builder.class, hint = "multithreaded" )
|
||||||
public class MultiThreadedBuilder implements Builder
|
public class MultiThreadedBuilder
|
||||||
|
implements Builder
|
||||||
{
|
{
|
||||||
|
|
||||||
@Requirement
|
@Requirement
|
||||||
|
@ -72,9 +73,12 @@ public class MultiThreadedBuilder implements Builder
|
||||||
List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
|
List<TaskSegment> taskSegments, ReactorBuildStatus reactorBuildStatus )
|
||||||
throws ExecutionException, InterruptedException
|
throws ExecutionException, InterruptedException
|
||||||
{
|
{
|
||||||
ExecutorService executor = Executors.newFixedThreadPool(Math.min(session.getRequest().getDegreeOfConcurrency(), session.getProjects().size()), new BuildThreadFactory());
|
ExecutorService executor =
|
||||||
CompletionService<ProjectSegment> service = new ExecutorCompletionService<ProjectSegment>(executor);
|
Executors.newFixedThreadPool( Math.min( session.getRequest().getDegreeOfConcurrency(),
|
||||||
ConcurrencyDependencyGraph analyzer = new ConcurrencyDependencyGraph(projectBuilds, session.getProjectDependencyGraph());
|
session.getProjects().size() ), new BuildThreadFactory() );
|
||||||
|
CompletionService<ProjectSegment> service = new ExecutorCompletionService<ProjectSegment>( executor );
|
||||||
|
ConcurrencyDependencyGraph analyzer =
|
||||||
|
new ConcurrencyDependencyGraph( projectBuilds, session.getProjectDependencyGraph() );
|
||||||
|
|
||||||
// Currently disabled
|
// Currently disabled
|
||||||
ThreadOutputMuxer muxer = null; // new ThreadOutputMuxer( analyzer.getProjectBuilds(), System.out );
|
ThreadOutputMuxer muxer = null; // new ThreadOutputMuxer( analyzer.getProjectBuilds(), System.out );
|
||||||
|
@ -189,4 +193,4 @@ public class MultiThreadedBuilder implements Builder
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,24 @@
|
||||||
package org.apache.maven.lifecycle.internal.builder.singlethreaded;
|
package org.apache.maven.lifecycle.internal.builder.singlethreaded;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.maven.execution.MavenSession;
|
import org.apache.maven.execution.MavenSession;
|
||||||
|
|
|
@ -1093,7 +1093,7 @@ public class MavenCli
|
||||||
threadConfiguration.contains( "C" ) ? Integer.valueOf( threadConfiguration.replace( "C", "" ) )
|
threadConfiguration.contains( "C" ) ? Integer.valueOf( threadConfiguration.replace( "C", "" ) )
|
||||||
* Runtime.getRuntime().availableProcessors() : Integer.valueOf( threadConfiguration );
|
* Runtime.getRuntime().availableProcessors() : Integer.valueOf( threadConfiguration );
|
||||||
|
|
||||||
request.setDegreeOfConcurrency(threads);
|
request.setDegreeOfConcurrency( threads );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( commandLine.hasOption( CLIManager.BUILDER ) )
|
if ( commandLine.hasOption( CLIManager.BUILDER ) )
|
||||||
|
|
|
@ -77,11 +77,14 @@ public class DefaultModelValidator
|
||||||
Parent parent = model.getParent();
|
Parent parent = model.getParent();
|
||||||
if ( parent != null )
|
if ( parent != null )
|
||||||
{
|
{
|
||||||
validateStringNotEmpty( "parent.groupId", problems, Severity.FATAL, Version.BASE, parent.getGroupId(), parent );
|
validateStringNotEmpty( "parent.groupId", problems, Severity.FATAL, Version.BASE, parent.getGroupId(),
|
||||||
|
parent );
|
||||||
|
|
||||||
validateStringNotEmpty( "parent.artifactId", problems, Severity.FATAL, Version.BASE, parent.getArtifactId(), parent );
|
validateStringNotEmpty( "parent.artifactId", problems, Severity.FATAL, Version.BASE,
|
||||||
|
parent.getArtifactId(), parent );
|
||||||
|
|
||||||
validateStringNotEmpty( "parent.version", problems, Severity.FATAL, Version.BASE, parent.getVersion(), parent );
|
validateStringNotEmpty( "parent.version", problems, Severity.FATAL, Version.BASE, parent.getVersion(),
|
||||||
|
parent );
|
||||||
|
|
||||||
if ( equals( parent.getGroupId(), model.getGroupId() )
|
if ( equals( parent.getGroupId(), model.getGroupId() )
|
||||||
&& equals( parent.getArtifactId(), model.getArtifactId() ) )
|
&& equals( parent.getArtifactId(), model.getArtifactId() ) )
|
||||||
|
@ -95,7 +98,8 @@ public class DefaultModelValidator
|
||||||
{
|
{
|
||||||
Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
|
Severity errOn30 = getSeverity( request, ModelBuildingRequest.VALIDATION_LEVEL_MAVEN_3_0 );
|
||||||
|
|
||||||
validateEnum( "modelVersion", problems, Severity.ERROR, Version.V20, model.getModelVersion(), null, model, "4.0.0" );
|
validateEnum( "modelVersion", problems, Severity.ERROR, Version.V20, model.getModelVersion(), null, model,
|
||||||
|
"4.0.0" );
|
||||||
|
|
||||||
validateStringNoExpression( "groupId", problems, Severity.WARNING, Version.V20, model.getGroupId(), model );
|
validateStringNoExpression( "groupId", problems, Severity.WARNING, Version.V20, model.getGroupId(), model );
|
||||||
if ( parent == null )
|
if ( parent == null )
|
||||||
|
@ -103,7 +107,8 @@ public class DefaultModelValidator
|
||||||
validateStringNotEmpty( "groupId", problems, Severity.FATAL, Version.V20, model.getGroupId(), model );
|
validateStringNotEmpty( "groupId", problems, Severity.FATAL, Version.V20, model.getGroupId(), model );
|
||||||
}
|
}
|
||||||
|
|
||||||
validateStringNoExpression( "artifactId", problems, Severity.WARNING, Version.V20, model.getArtifactId(), model );
|
validateStringNoExpression( "artifactId", problems, Severity.WARNING, Version.V20, model.getArtifactId(),
|
||||||
|
model );
|
||||||
validateStringNotEmpty( "artifactId", problems, Severity.FATAL, Version.V20, model.getArtifactId(), model );
|
validateStringNotEmpty( "artifactId", problems, Severity.FATAL, Version.V20, model.getArtifactId(), model );
|
||||||
|
|
||||||
validateVersionNoExpression( "version", problems, Severity.WARNING, Version.V20, model.getVersion(), model );
|
validateVersionNoExpression( "version", problems, Severity.WARNING, Version.V20, model.getVersion(), model );
|
||||||
|
@ -117,13 +122,13 @@ public class DefaultModelValidator
|
||||||
if ( model.getDependencyManagement() != null )
|
if ( model.getDependencyManagement() != null )
|
||||||
{
|
{
|
||||||
validate20RawDependencies( problems, model.getDependencyManagement().getDependencies(),
|
validate20RawDependencies( problems, model.getDependencyManagement().getDependencies(),
|
||||||
"dependencyManagement.dependencies.dependency", request );
|
"dependencyManagement.dependencies.dependency", request );
|
||||||
}
|
}
|
||||||
|
|
||||||
validateRawRepositories( problems, model.getRepositories(), "repositories.repository", request );
|
validateRawRepositories( problems, model.getRepositories(), "repositories.repository", request );
|
||||||
|
|
||||||
validateRawRepositories( problems, model.getPluginRepositories(), "pluginRepositories.pluginRepository",
|
validateRawRepositories( problems, model.getPluginRepositories(), "pluginRepositories.pluginRepository",
|
||||||
request );
|
request );
|
||||||
|
|
||||||
Build build = model.getBuild();
|
Build build = model.getBuild();
|
||||||
if ( build != null )
|
if ( build != null )
|
||||||
|
@ -133,8 +138,7 @@ public class DefaultModelValidator
|
||||||
PluginManagement mngt = build.getPluginManagement();
|
PluginManagement mngt = build.getPluginManagement();
|
||||||
if ( mngt != null )
|
if ( mngt != null )
|
||||||
{
|
{
|
||||||
validate20RawPlugins( problems, mngt.getPlugins(), "build.pluginManagement.plugins.plugin",
|
validate20RawPlugins( problems, mngt.getPlugins(), "build.pluginManagement.plugins.plugin", request );
|
||||||
request );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,32 +685,34 @@ public class DefaultModelValidator
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validateVersionNoExpression(String fieldName, ModelProblemCollector problems, Severity severity, Version version,
|
private boolean validateVersionNoExpression( String fieldName, ModelProblemCollector problems, Severity severity,
|
||||||
String string, InputLocationTracker tracker)
|
Version version, String string, InputLocationTracker tracker )
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( !hasExpression( string ) )
|
if ( !hasExpression( string ) )
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Acceptable versions for continuous delivery
|
// Acceptable versions for continuous delivery
|
||||||
//
|
//
|
||||||
// changelist
|
// changelist
|
||||||
// revision
|
// revision
|
||||||
// sha1
|
// sha1
|
||||||
//
|
//
|
||||||
if( string.trim().contains("${changelist}") || string.trim().contains("${revision}") || string.trim().contains("${sha1}") )
|
if ( string.trim().contains( "${changelist}" ) || string.trim().contains( "${revision}" )
|
||||||
{
|
|| string.trim().contains( "${sha1}" ) )
|
||||||
return true;
|
{
|
||||||
}
|
return true;
|
||||||
|
}
|
||||||
addViolation(problems, severity, version, fieldName, null, "contains an expression but should be a constant.", tracker);
|
|
||||||
|
addViolation( problems, severity, version, fieldName, null, "contains an expression but should be a constant.",
|
||||||
return false;
|
tracker );
|
||||||
}
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean hasExpression( String value )
|
private boolean hasExpression( String value )
|
||||||
{
|
{
|
||||||
return value != null && value.contains( "${" );
|
return value != null && value.contains( "${" );
|
||||||
|
@ -764,8 +770,8 @@ public class DefaultModelValidator
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validateBoolean( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
|
private boolean validateBoolean( String fieldName, ModelProblemCollector problems, Severity severity,
|
||||||
String string, String sourceHint, InputLocationTracker tracker )
|
Version version, String string, String sourceHint, InputLocationTracker tracker )
|
||||||
{
|
{
|
||||||
if ( string == null || string.length() <= 0 )
|
if ( string == null || string.length() <= 0 )
|
||||||
{
|
{
|
||||||
|
@ -777,14 +783,14 @@ public class DefaultModelValidator
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
addViolation( problems, severity, version, fieldName, sourceHint, "must be 'true' or 'false' but is '" + string + "'.",
|
addViolation( problems, severity, version, fieldName, sourceHint, "must be 'true' or 'false' but is '" + string
|
||||||
tracker );
|
+ "'.", tracker );
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validateEnum( String fieldName, ModelProblemCollector problems, Severity severity, Version version, String string,
|
private boolean validateEnum( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
|
||||||
String sourceHint, InputLocationTracker tracker, String... validValues )
|
String string, String sourceHint, InputLocationTracker tracker, String... validValues )
|
||||||
{
|
{
|
||||||
if ( string == null || string.length() <= 0 )
|
if ( string == null || string.length() <= 0 )
|
||||||
{
|
{
|
||||||
|
@ -804,9 +810,9 @@ public class DefaultModelValidator
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validateBannedCharacters( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
|
private boolean validateBannedCharacters( String fieldName, ModelProblemCollector problems, Severity severity,
|
||||||
String string, String sourceHint, InputLocationTracker tracker,
|
Version version, String string, String sourceHint,
|
||||||
String banned )
|
InputLocationTracker tracker, String banned )
|
||||||
{
|
{
|
||||||
if ( string != null )
|
if ( string != null )
|
||||||
{
|
{
|
||||||
|
@ -825,8 +831,8 @@ public class DefaultModelValidator
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validateVersion( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
|
private boolean validateVersion( String fieldName, ModelProblemCollector problems, Severity severity,
|
||||||
String string, String sourceHint, InputLocationTracker tracker )
|
Version version, String string, String sourceHint, InputLocationTracker tracker )
|
||||||
{
|
{
|
||||||
if ( string == null || string.length() <= 0 )
|
if ( string == null || string.length() <= 0 )
|
||||||
{
|
{
|
||||||
|
@ -845,8 +851,9 @@ public class DefaultModelValidator
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validate20ProperSnapshotVersion( String fieldName, ModelProblemCollector problems, Severity severity, Version version,
|
private boolean validate20ProperSnapshotVersion( String fieldName, ModelProblemCollector problems,
|
||||||
String string, String sourceHint, InputLocationTracker tracker )
|
Severity severity, Version version, String string,
|
||||||
|
String sourceHint, InputLocationTracker tracker )
|
||||||
{
|
{
|
||||||
if ( string == null || string.length() <= 0 )
|
if ( string == null || string.length() <= 0 )
|
||||||
{
|
{
|
||||||
|
@ -855,8 +862,8 @@ public class DefaultModelValidator
|
||||||
|
|
||||||
if ( string.endsWith( "SNAPSHOT" ) && !string.endsWith( "-SNAPSHOT" ) )
|
if ( string.endsWith( "SNAPSHOT" ) && !string.endsWith( "-SNAPSHOT" ) )
|
||||||
{
|
{
|
||||||
addViolation( problems, severity, version, fieldName, sourceHint, "uses an unsupported snapshot version format"
|
addViolation( problems, severity, version, fieldName, sourceHint,
|
||||||
+ ", should be '*-SNAPSHOT' instead.", tracker );
|
"uses an unsupported snapshot version format" + ", should be '*-SNAPSHOT' instead.", tracker );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -864,8 +871,8 @@ public class DefaultModelValidator
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean validate20PluginVersion( String fieldName, ModelProblemCollector problems, String string,
|
private boolean validate20PluginVersion( String fieldName, ModelProblemCollector problems, String string,
|
||||||
String sourceHint, InputLocationTracker tracker,
|
String sourceHint, InputLocationTracker tracker,
|
||||||
ModelBuildingRequest request )
|
ModelBuildingRequest request )
|
||||||
{
|
{
|
||||||
if ( string == null )
|
if ( string == null )
|
||||||
{
|
{
|
||||||
|
@ -882,16 +889,16 @@ public class DefaultModelValidator
|
||||||
|
|
||||||
if ( string.length() <= 0 || "RELEASE".equals( string ) || "LATEST".equals( string ) )
|
if ( string.length() <= 0 || "RELEASE".equals( string ) || "LATEST".equals( string ) )
|
||||||
{
|
{
|
||||||
addViolation( problems, errOn30, Version.V20, fieldName, sourceHint, "must be a valid version but is '" + string + "'.",
|
addViolation( problems, errOn30, Version.V20, fieldName, sourceHint, "must be a valid version but is '"
|
||||||
tracker );
|
+ string + "'.", tracker );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addViolation( ModelProblemCollector problems, Severity severity, Version version, String fieldName,
|
private static void addViolation( ModelProblemCollector problems, Severity severity, Version version,
|
||||||
String sourceHint, String message, InputLocationTracker tracker )
|
String fieldName, String sourceHint, String message, InputLocationTracker tracker )
|
||||||
{
|
{
|
||||||
StringBuilder buffer = new StringBuilder( 256 );
|
StringBuilder buffer = new StringBuilder( 256 );
|
||||||
buffer.append( '\'' ).append( fieldName ).append( '\'' );
|
buffer.append( '\'' ).append( fieldName ).append( '\'' );
|
||||||
|
|
Loading…
Reference in New Issue