mirror of https://github.com/apache/maven.git
[MNG-6294] Convert MavenPluginValidator into a JSR 330 component
Modified by: Guillaume Dufour <guillaume.duff@gmail.com> This closes #134 and closes #470
This commit is contained in:
parent
9ba84aabe2
commit
83e36649c0
|
@ -31,7 +31,6 @@
|
||||||
import org.apache.maven.plugin.ExtensionRealmCache;
|
import org.apache.maven.plugin.ExtensionRealmCache;
|
||||||
import org.apache.maven.plugin.InvalidPluginDescriptorException;
|
import org.apache.maven.plugin.InvalidPluginDescriptorException;
|
||||||
import org.apache.maven.plugin.MavenPluginManager;
|
import org.apache.maven.plugin.MavenPluginManager;
|
||||||
import org.apache.maven.plugin.MavenPluginValidator;
|
|
||||||
import org.apache.maven.plugin.Mojo;
|
import org.apache.maven.plugin.Mojo;
|
||||||
import org.apache.maven.plugin.MojoExecution;
|
import org.apache.maven.plugin.MojoExecution;
|
||||||
import org.apache.maven.plugin.MojoNotFoundException;
|
import org.apache.maven.plugin.MojoNotFoundException;
|
||||||
|
@ -166,6 +165,9 @@ public class DefaultMavenPluginManager
|
||||||
@Inject
|
@Inject
|
||||||
private PluginArtifactsCache pluginArtifactsCache;
|
private PluginArtifactsCache pluginArtifactsCache;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private MavenPluginValidator pluginValidator;
|
||||||
|
|
||||||
private ExtensionDescriptorBuilder extensionDescriptorBuilder = new ExtensionDescriptorBuilder();
|
private ExtensionDescriptorBuilder extensionDescriptorBuilder = new ExtensionDescriptorBuilder();
|
||||||
|
|
||||||
private PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
|
private PluginDescriptorBuilder builder = new PluginDescriptorBuilder();
|
||||||
|
@ -243,14 +245,13 @@ private PluginDescriptor extractPluginDescriptor( Artifact pluginArtifact, Plugi
|
||||||
throw new PluginDescriptorParsingException( plugin, pluginFile.getAbsolutePath(), e );
|
throw new PluginDescriptorParsingException( plugin, pluginFile.getAbsolutePath(), e );
|
||||||
}
|
}
|
||||||
|
|
||||||
MavenPluginValidator validator = new MavenPluginValidator( pluginArtifact );
|
List<String> errors = new ArrayList<>();
|
||||||
|
pluginValidator.validate( pluginArtifact, pluginDescriptor, errors );
|
||||||
|
|
||||||
validator.validate( pluginDescriptor );
|
if ( !errors.isEmpty() )
|
||||||
|
|
||||||
if ( validator.hasErrors() )
|
|
||||||
{
|
{
|
||||||
throw new InvalidPluginDescriptorException(
|
throw new InvalidPluginDescriptorException(
|
||||||
"Invalid plugin descriptor for " + plugin.getId() + " (" + pluginFile + ")", validator.getErrors() );
|
"Invalid plugin descriptor for " + plugin.getId() + " (" + pluginFile + ")", errors );
|
||||||
}
|
}
|
||||||
|
|
||||||
pluginDescriptor.setPluginArtifact( pluginArtifact );
|
pluginDescriptor.setPluginArtifact( pluginArtifact );
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package org.apache.maven.plugin;
|
package org.apache.maven.plugin.internal;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
@ -19,40 +19,26 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.apache.maven.artifact.Artifact;
|
import org.apache.maven.artifact.Artifact;
|
||||||
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
|
|
||||||
|
import javax.inject.Named;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MavenPluginValidator
|
* DefaultMavenPluginValidator
|
||||||
*/
|
*/
|
||||||
public class MavenPluginValidator
|
@Named
|
||||||
|
@Singleton
|
||||||
|
class DefaultMavenPluginValidator
|
||||||
|
implements MavenPluginValidator
|
||||||
{
|
{
|
||||||
private final Artifact pluginArtifact;
|
|
||||||
|
|
||||||
private List<String> errors = new ArrayList<>();
|
@Override
|
||||||
|
public void validate( Artifact pluginArtifact, PluginDescriptor pluginDescriptor, List<String> errors )
|
||||||
private boolean firstDescriptor = true;
|
|
||||||
|
|
||||||
public MavenPluginValidator( Artifact pluginArtifact )
|
|
||||||
{
|
{
|
||||||
this.pluginArtifact = pluginArtifact;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void validate( PluginDescriptor pluginDescriptor )
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* NOTE: For plugins that depend on other plugin artifacts the plugin realm contains more than one plugin
|
|
||||||
* descriptor. However, only the first descriptor is of interest.
|
|
||||||
*/
|
|
||||||
if ( !firstDescriptor )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
firstDescriptor = false;
|
|
||||||
|
|
||||||
if ( !pluginArtifact.getGroupId().equals( pluginDescriptor.getGroupId() ) )
|
if ( !pluginArtifact.getGroupId().equals( pluginDescriptor.getGroupId() ) )
|
||||||
{
|
{
|
||||||
errors.add( "Plugin's descriptor contains the wrong group ID: " + pluginDescriptor.getGroupId() );
|
errors.add( "Plugin's descriptor contains the wrong group ID: " + pluginDescriptor.getGroupId() );
|
||||||
|
@ -68,14 +54,4 @@ public void validate( PluginDescriptor pluginDescriptor )
|
||||||
errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() );
|
errors.add( "Plugin's descriptor contains the wrong version: " + pluginDescriptor.getVersion() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasErrors()
|
|
||||||
{
|
|
||||||
return !errors.isEmpty();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getErrors()
|
|
||||||
{
|
|
||||||
return errors;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package org.apache.maven.plugin.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.List;
|
||||||
|
import org.apache.maven.artifact.Artifact;
|
||||||
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MavenPluginValidator
|
||||||
|
*/
|
||||||
|
interface MavenPluginValidator
|
||||||
|
{
|
||||||
|
|
||||||
|
void validate( Artifact pluginArtfiact, PluginDescriptor pluginDescriptor, List<String> errors );
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,105 @@
|
||||||
|
package org.apache.maven.plugin.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.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.maven.AbstractCoreMavenComponentTestCase;
|
||||||
|
import org.apache.maven.artifact.Artifact;
|
||||||
|
import org.apache.maven.artifact.DefaultArtifact;
|
||||||
|
import org.apache.maven.artifact.handler.DefaultArtifactHandler;
|
||||||
|
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||||
|
import org.apache.maven.plugin.internal.MavenPluginValidator;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Michael Simacek
|
||||||
|
*/
|
||||||
|
public class MavenPluginValidatorTest extends AbstractCoreMavenComponentTestCase
|
||||||
|
{
|
||||||
|
@Inject
|
||||||
|
private MavenPluginValidator mavenPluginValidator;
|
||||||
|
|
||||||
|
protected String getProjectsDirectory()
|
||||||
|
{
|
||||||
|
return "src/test/projects/default-maven";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testValidate()
|
||||||
|
{
|
||||||
|
Artifact plugin = new DefaultArtifact( "org.apache.maven.its.plugins", "maven-it-plugin", "0.1", "compile",
|
||||||
|
"jar", null, new DefaultArtifactHandler() );
|
||||||
|
PluginDescriptor descriptor = new PluginDescriptor();
|
||||||
|
descriptor.setGroupId( "org.apache.maven.its.plugins" );
|
||||||
|
descriptor.setArtifactId( "maven-it-plugin" );
|
||||||
|
descriptor.setVersion( "0.1" );
|
||||||
|
List<String> errors = new ArrayList<>();
|
||||||
|
mavenPluginValidator.validate( plugin, descriptor, errors );
|
||||||
|
assertTrue( errors.isEmpty() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvalidGroupId()
|
||||||
|
{
|
||||||
|
Artifact plugin = new DefaultArtifact( "org.apache.maven.its.plugins", "maven-it-plugin", "0.1", "compile",
|
||||||
|
"jar", null, new DefaultArtifactHandler() );
|
||||||
|
PluginDescriptor descriptor = new PluginDescriptor();
|
||||||
|
descriptor.setGroupId( "org.apache.maven.its.plugins.invalid" );
|
||||||
|
descriptor.setArtifactId( "maven-it-plugin" );
|
||||||
|
descriptor.setVersion( "0.1" );
|
||||||
|
List<String> errors = new ArrayList<>();
|
||||||
|
mavenPluginValidator.validate( plugin, descriptor, errors );
|
||||||
|
assertFalse( errors.isEmpty() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvalidArtifactId()
|
||||||
|
{
|
||||||
|
Artifact plugin = new DefaultArtifact( "org.apache.maven.its.plugins", "maven-it-plugin", "0.1", "compile",
|
||||||
|
"jar", null, new DefaultArtifactHandler() );
|
||||||
|
PluginDescriptor descriptor = new PluginDescriptor();
|
||||||
|
descriptor.setGroupId( "org.apache.maven.its.plugins" );
|
||||||
|
descriptor.setArtifactId( "maven-it-plugin.invalid" );
|
||||||
|
descriptor.setVersion( "0.1" );
|
||||||
|
List<String> errors = new ArrayList<>();
|
||||||
|
mavenPluginValidator.validate( plugin, descriptor, errors );
|
||||||
|
assertFalse( errors.isEmpty() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvalidVersion()
|
||||||
|
{
|
||||||
|
Artifact plugin = new DefaultArtifact( "org.apache.maven.its.plugins", "maven-it-plugin", "0.1", "compile",
|
||||||
|
"jar", null, new DefaultArtifactHandler() );
|
||||||
|
PluginDescriptor descriptor = new PluginDescriptor();
|
||||||
|
descriptor.setGroupId( "org.apache.maven.its.plugins" );
|
||||||
|
descriptor.setArtifactId( "maven-it-plugin" );
|
||||||
|
List<String> errors = new ArrayList<>();
|
||||||
|
mavenPluginValidator.validate( plugin, descriptor, errors );
|
||||||
|
assertFalse( errors.isEmpty() );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue