mirror of https://github.com/apache/maven.git
MNG-3131: Error message is misleading if a missing plugin parameter is of a type like List
This commit is contained in:
parent
b1b526ac9e
commit
56cd921fbd
|
@ -19,8 +19,10 @@ package org.apache.maven.plugin;
|
|||
* under the License.
|
||||
*/
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
import org.apache.maven.plugin.descriptor.Parameter;
|
||||
|
@ -75,12 +77,53 @@ public class PluginParameterException
|
|||
StringBuilder messageBuffer )
|
||||
{
|
||||
String expression = param.getExpression();
|
||||
|
||||
|
||||
if ( param.isEditable() )
|
||||
{
|
||||
messageBuffer.append( "Inside the definition for plugin \'" + mojo.getPluginDescriptor().getArtifactId()
|
||||
+ "\', specify the following:\n\n<configuration>\n ...\n <" + param.getName() + ">VALUE</"
|
||||
+ param.getName() + ">\n</configuration>" );
|
||||
boolean isArray = param.getType().endsWith( "[]" );
|
||||
boolean isCollection = false;
|
||||
boolean isMap = false;
|
||||
if ( !isArray )
|
||||
{
|
||||
try
|
||||
{
|
||||
//assuming Type is available in current ClassLoader
|
||||
isCollection = Collection.class.isAssignableFrom( Class.forName( param.getType() ) );
|
||||
isMap = Map.class.isAssignableFrom( Class.forName( param.getType() ) );
|
||||
}
|
||||
catch ( ClassNotFoundException e )
|
||||
{
|
||||
// assume it is not assignable from Collection or Map
|
||||
}
|
||||
}
|
||||
|
||||
messageBuffer.append( "Inside the definition for plugin \'");
|
||||
messageBuffer.append( mojo.getPluginDescriptor().getArtifactId() );
|
||||
messageBuffer.append( "\', specify the following:\n\n<configuration>\n ...\n" );
|
||||
messageBuffer.append( " <" ).append( param.getName() ).append( '>' );
|
||||
if( isArray || isCollection )
|
||||
{
|
||||
messageBuffer.append( '\n' );
|
||||
messageBuffer.append( " <item>" );
|
||||
}
|
||||
else if ( isMap )
|
||||
{
|
||||
messageBuffer.append( '\n' );
|
||||
messageBuffer.append( " <KEY>" );
|
||||
}
|
||||
messageBuffer.append( "VALUE" );
|
||||
if( isArray || isCollection )
|
||||
{
|
||||
messageBuffer.append( "</item>\n" );
|
||||
messageBuffer.append( " " );
|
||||
}
|
||||
else if ( isMap )
|
||||
{
|
||||
messageBuffer.append( "</KEY>\n" );
|
||||
messageBuffer.append( " " );
|
||||
}
|
||||
messageBuffer.append( "</" ).append( param.getName() ).append( ">\n" );
|
||||
messageBuffer.append( "</configuration>" );
|
||||
|
||||
String alias = param.getAlias();
|
||||
if ( StringUtils.isNotEmpty( alias ) && !alias.equals( param.getName() ) )
|
||||
|
|
|
@ -0,0 +1,131 @@
|
|||
package org.apache.maven.plugin;
|
||||
|
||||
/*
|
||||
* 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.Collections;
|
||||
|
||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||
import org.apache.maven.plugin.descriptor.Parameter;
|
||||
import org.apache.maven.plugin.descriptor.PluginDescriptor;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* MNG-3131
|
||||
*
|
||||
* @author Robert Scholte
|
||||
*
|
||||
*/
|
||||
public class PluginParameterExceptionTest
|
||||
extends TestCase
|
||||
{
|
||||
|
||||
public void testMissingRequiredStringArrayTypeParameter()
|
||||
{
|
||||
MojoDescriptor mojoDescriptor = new MojoDescriptor();
|
||||
mojoDescriptor.setGoal( "goal" );
|
||||
PluginDescriptor pluginDescriptor = new PluginDescriptor();
|
||||
pluginDescriptor.setGoalPrefix( "goalPrefix" );
|
||||
pluginDescriptor.setArtifactId( "artifactId" );
|
||||
mojoDescriptor.setPluginDescriptor( pluginDescriptor );
|
||||
|
||||
Parameter parameter = new Parameter();
|
||||
parameter.setType( "java.lang.String[]" );
|
||||
parameter.setName( "toAddresses" );
|
||||
|
||||
parameter.setRequired( true );
|
||||
|
||||
PluginParameterException exception =
|
||||
new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
|
||||
|
||||
assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
|
||||
"\n" +
|
||||
"[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
|
||||
"\n" +
|
||||
"<configuration>\n" +
|
||||
" ...\n" +
|
||||
" <toAddresses>\n" +
|
||||
" <item>VALUE</item>\n" +
|
||||
" </toAddresses>\n" +
|
||||
"</configuration>.\n", exception.buildDiagnosticMessage() );
|
||||
}
|
||||
|
||||
public void testMissingRequiredCollectionTypeParameter()
|
||||
{
|
||||
MojoDescriptor mojoDescriptor = new MojoDescriptor();
|
||||
mojoDescriptor.setGoal( "goal" );
|
||||
PluginDescriptor pluginDescriptor = new PluginDescriptor();
|
||||
pluginDescriptor.setGoalPrefix( "goalPrefix" );
|
||||
pluginDescriptor.setArtifactId( "artifactId" );
|
||||
mojoDescriptor.setPluginDescriptor( pluginDescriptor );
|
||||
|
||||
Parameter parameter = new Parameter();
|
||||
parameter.setType( "java.util.List" );
|
||||
parameter.setName( "toAddresses" );
|
||||
|
||||
parameter.setRequired( true );
|
||||
|
||||
PluginParameterException exception =
|
||||
new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
|
||||
|
||||
assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
|
||||
"\n" +
|
||||
"[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
|
||||
"\n" +
|
||||
"<configuration>\n" +
|
||||
" ...\n" +
|
||||
" <toAddresses>\n" +
|
||||
" <item>VALUE</item>\n" +
|
||||
" </toAddresses>\n" +
|
||||
"</configuration>.\n", exception.buildDiagnosticMessage() );
|
||||
}
|
||||
|
||||
public void testMissingRequiredMapTypeParameter()
|
||||
{
|
||||
MojoDescriptor mojoDescriptor = new MojoDescriptor();
|
||||
mojoDescriptor.setGoal( "goal" );
|
||||
PluginDescriptor pluginDescriptor = new PluginDescriptor();
|
||||
pluginDescriptor.setGoalPrefix( "goalPrefix" );
|
||||
pluginDescriptor.setArtifactId( "artifactId" );
|
||||
mojoDescriptor.setPluginDescriptor( pluginDescriptor );
|
||||
|
||||
Parameter parameter = new Parameter();
|
||||
parameter.setType( "java.util.Map" );
|
||||
parameter.setName( "toAddresses" );
|
||||
|
||||
parameter.setRequired( true );
|
||||
|
||||
PluginParameterException exception =
|
||||
new PluginParameterException( mojoDescriptor, Collections.singletonList( parameter ) );
|
||||
|
||||
assertEquals( "One or more required plugin parameters are invalid/missing for 'goalPrefix:goal'\n" +
|
||||
"\n" +
|
||||
"[0] Inside the definition for plugin 'artifactId', specify the following:\n" +
|
||||
"\n" +
|
||||
"<configuration>\n" +
|
||||
" ...\n" +
|
||||
" <toAddresses>\n" +
|
||||
" <KEY>VALUE</KEY>\n" +
|
||||
" </toAddresses>\n" +
|
||||
"</configuration>.\n", exception.buildDiagnosticMessage() );
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue