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.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
import org.apache.maven.plugin.descriptor.MojoDescriptor;
|
||||||
import org.apache.maven.plugin.descriptor.Parameter;
|
import org.apache.maven.plugin.descriptor.Parameter;
|
||||||
|
@ -78,9 +80,50 @@ public class PluginParameterException
|
||||||
|
|
||||||
if ( param.isEditable() )
|
if ( param.isEditable() )
|
||||||
{
|
{
|
||||||
messageBuffer.append( "Inside the definition for plugin \'" + mojo.getPluginDescriptor().getArtifactId()
|
boolean isArray = param.getType().endsWith( "[]" );
|
||||||
+ "\', specify the following:\n\n<configuration>\n ...\n <" + param.getName() + ">VALUE</"
|
boolean isCollection = false;
|
||||||
+ param.getName() + ">\n</configuration>" );
|
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();
|
String alias = param.getAlias();
|
||||||
if ( StringUtils.isNotEmpty( alias ) && !alias.equals( param.getName() ) )
|
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