[MNG-5222] Maven 3 no longer logs warnings about deprecated plugin parameters

This commit is contained in:
Slawomir Jaranowski 2022-04-01 23:33:42 +02:00
parent 6303d3ef16
commit 8599cec4a7
5 changed files with 548 additions and 0 deletions

View File

@ -106,6 +106,7 @@ public static Test suite()
// Tests that don't run stable and need to be fixed
// -------------------------------------------------------------------------------------------------------------
// suite.addTestSuite( MavenIT0108SnapshotUpdateTest.class ); -- MNG-3137
suite.addTestSuite( MavenITmng5222MojoDeprecatedParamsTest.class );
suite.addTestSuite( MavenITmng7390SelectModuleOutsideCwdTest.class );
suite.addTestSuite( MavenITmng7244IgnorePomPrefixInExpressions.class );
suite.addTestSuite( MavenITmng7349RelocationWarningTest.class );

View File

@ -0,0 +1,252 @@
package org.apache.maven.it;
/*
* 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.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.regex.Pattern;
import org.apache.maven.it.util.ResourceExtractor;
/**
* Test for <a href="https://issues.apache.org/jira/browse/MNG-5222">MNG-5222</a>
*/
public class MavenITmng5222MojoDeprecatedParamsTest
extends AbstractMavenIntegrationTestCase
{
public MavenITmng5222MojoDeprecatedParamsTest()
{
super( "[4.0.0-alpha-1,)" );
}
/**
* Test that ensures that deprecation is not printed for empty and default value
*
* @throws Exception in case of failure
*/
public void testEmptyConfiguration()
throws Exception
{
File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-5222-mojo-deprecated-params" );
Verifier verifier = newVerifier( testDir.getAbsolutePath() );
verifier.setAutoclean( false );
verifier.deleteDirectory( "target" );
verifier.setLogFileName( "log-empty-configuration.txt" );
verifier.executeGoal( "validate" );
verifier.verifyErrorFreeLog();
verifier.resetStreams();
List<String> logLines = verifier.loadFile( verifier.getBasedir(), verifier.getLogFileName(), false );
List<String> warnLines = findDeprecationWarning( logLines );
assertTrue( "Log contains warnings: " + warnLines, warnLines.isEmpty() );
Properties configProps = verifier.loadProperties( "target/config.properties" );
assertEquals( "0", configProps.remove( "deprecatedArray" ) );
assertEquals( "3", configProps.remove( "deprecatedArrayWithDefaults" ) );
assertEquals( "a1 ", configProps.remove( "deprecatedArrayWithDefaults.0" ) );
assertEquals( "a2", configProps.remove( "deprecatedArrayWithDefaults.1" ) );
assertEquals( " a3", configProps.remove( "deprecatedArrayWithDefaults.2" ) );
assertEquals( "0", configProps.remove( "deprecatedList" ) );
assertEquals( "3", configProps.remove( "deprecatedListWithDefaults" ) );
assertEquals( "l1", configProps.remove( "deprecatedListWithDefaults.0" ) );
assertEquals( "l2", configProps.remove( "deprecatedListWithDefaults.1" ) );
assertEquals( "l3", configProps.remove( "deprecatedListWithDefaults.2" ) );
assertEquals( "testValue", configProps.remove( "deprecatedParamWithDefaultConstant" ) );
assertEquals( "https://www.test.org", configProps.remove( "deprecatedParamWithDefaultEvaluate" ) );
assertTrue( "not checked config properties: " + configProps, configProps.isEmpty() );
}
/**
* Test that ensures that deprecation is printed for deprecated parameter set by property
*
* @throws Exception in case of failure
*/
public void testDeprecatedProperty()
throws Exception
{
File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-5222-mojo-deprecated-params" );
Verifier verifier = newVerifier( testDir.getAbsolutePath() );
verifier.addCliOption( "-Dconfig.deprecatedParam2=deprecatedValueInProps" );
verifier.addCliOption( "-Dconfig.deprecatedArray=3,2,4,deprecated" );
verifier.addCliOption( "-Dconfig.deprecatedList=4,5,deprecated" );
verifier.setAutoclean( false );
verifier.deleteDirectory( "target" );
verifier.setLogFileName( "log-deprecated-property.txt" );
verifier.executeGoal( "validate" );
verifier.verifyErrorFreeLog();
verifier.resetStreams();
List<String> logLines = verifier.loadFile( verifier.getBasedir(), verifier.getLogFileName(), false );
List<String> warnLines = findDeprecationWarning( logLines );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedParam2' (user property 'config.deprecatedParam2') is deprecated: No reason given" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedArray' (user property 'config.deprecatedArray') is deprecated: deprecated array" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedList' (user property 'config.deprecatedList') is deprecated: deprecated list" ) );
assertTrue( "Not verified line: " + warnLines, warnLines.isEmpty() );
Properties configProps = verifier.loadProperties( "target/config.properties" );
assertEquals( "deprecatedValueInProps", configProps.remove( "deprecatedParam2" ) );
assertEquals( "4", configProps.remove( "deprecatedArray" ) );
assertEquals( "3", configProps.remove( "deprecatedArray.0" ) );
assertEquals( "2", configProps.remove( "deprecatedArray.1" ) );
assertEquals( "4", configProps.remove( "deprecatedArray.2" ) );
assertEquals( "deprecated", configProps.remove( "deprecatedArray.3" ) );
assertEquals( "3", configProps.remove( "deprecatedArrayWithDefaults" ) );
assertEquals( "a1 ", configProps.remove( "deprecatedArrayWithDefaults.0" ) );
assertEquals( "a2", configProps.remove( "deprecatedArrayWithDefaults.1" ) );
assertEquals( " a3", configProps.remove( "deprecatedArrayWithDefaults.2" ) );
assertEquals( "3", configProps.remove( "deprecatedList" ) );
assertEquals( "4", configProps.remove( "deprecatedList.0" ) );
assertEquals( "5", configProps.remove( "deprecatedList.1" ) );
assertEquals( "deprecated", configProps.remove( "deprecatedList.2" ) );
assertEquals( "3", configProps.remove( "deprecatedListWithDefaults" ) );
assertEquals( "l1", configProps.remove( "deprecatedListWithDefaults.0" ) );
assertEquals( "l2", configProps.remove( "deprecatedListWithDefaults.1" ) );
assertEquals( "l3", configProps.remove( "deprecatedListWithDefaults.2" ) );
assertEquals( "testValue", configProps.remove( "deprecatedParamWithDefaultConstant" ) );
assertEquals( "https://www.test.org", configProps.remove( "deprecatedParamWithDefaultEvaluate" ) );
assertTrue( "not checked config properties: " + configProps, configProps.isEmpty() );
}
/**
* Test that ensures that deprecation is printed for deprecated parameter set by plugin configuration.
*
* @throws Exception in case of failure
*/
public void testDeprecatedConfig()
throws Exception
{
File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/mng-5222-mojo-deprecated-params" );
Verifier verifier = newVerifier( testDir.getAbsolutePath() );
verifier.addCliOption( "-Pconfig-values" );
verifier.setAutoclean( false );
verifier.deleteDirectory( "target" );
verifier.setLogFileName( "log-deprecated-config.txt" );
verifier.executeGoal( "validate" );
verifier.verifyErrorFreeLog();
verifier.resetStreams();
List<String> logLines = verifier.loadFile( verifier.getBasedir(), verifier.getLogFileName(), false );
List<String> warnLines = findDeprecationWarning( logLines );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedParam' is deprecated: I'm deprecated param" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedParam2' (user property 'config.deprecatedParam2') is deprecated: No reason given" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedParamWithDefaultConstant' is deprecated: deprecated with constant value" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedParamWithDefaultEvaluate' is deprecated: deprecated with evaluate value" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedArray' (user property 'config.deprecatedArray') is deprecated: deprecated array" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedArrayWithDefaults' is deprecated: deprecated array" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedList' (user property 'config.deprecatedList') is deprecated: deprecated list" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedListWithDefaults' is deprecated: deprecated list" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedProperties' is deprecated: deprecated properties" ) );
assertTrue( warnLines.remove(
"[WARNING] Parameter 'deprecatedMap' is deprecated: deprecated map" ));
assertTrue( "Not verified line: " + warnLines, warnLines.isEmpty() );
Properties configProps = verifier.loadProperties( "target/config.properties" );
assertEquals( "value1", configProps.remove( "deprecatedParam" ) );
assertEquals( "value2", configProps.remove( "deprecatedParam2" ) );
assertEquals( "value3", configProps.remove( "deprecatedParamWithDefaultConstant" ) );
assertEquals( "value4", configProps.remove( "deprecatedParamWithDefaultEvaluate" ) );
assertEquals( "2", configProps.remove( "deprecatedArray" ) );
assertEquals( "a1", configProps.remove( "deprecatedArray.0" ) );
assertEquals( "a2", configProps.remove( "deprecatedArray.1" ) );
assertEquals( "2", configProps.remove( "deprecatedArrayWithDefaults" ) );
assertEquals( "b1", configProps.remove( "deprecatedArrayWithDefaults.0" ) );
assertEquals( "b2", configProps.remove( "deprecatedArrayWithDefaults.1" ) );
assertEquals( "2", configProps.remove( "deprecatedList" ) );
assertEquals( "c1", configProps.remove( "deprecatedList.0" ) );
assertEquals( "c2", configProps.remove( "deprecatedList.1" ) );
assertEquals( "2", configProps.remove( "deprecatedListWithDefaults" ) );
assertEquals( "d1", configProps.remove( "deprecatedListWithDefaults.0" ) );
assertEquals( "d2", configProps.remove( "deprecatedListWithDefaults.1" ) );
assertEquals( "2", configProps.remove( "deprecatedProperties" ) );
assertEquals( "propertyValue1", configProps.remove( "deprecatedProperties.propertyName1" ) );
assertEquals( "propertyValue2", configProps.remove( "deprecatedProperties.propertyName2" ) );
assertEquals( "2", configProps.remove( "deprecatedMap" ) );
assertEquals( "value1", configProps.remove( "deprecatedMap.key1" ) );
assertEquals( "value2", configProps.remove( "deprecatedMap.key2" ) );
assertTrue( "not checked config properties: " + configProps, configProps.isEmpty() );
}
private List<String> findDeprecationWarning( List<String> logLines )
{
Pattern pattern = Pattern.compile( "\\[WARNING] {3}Parameter .* is deprecated:.*" );
List<String> result = new ArrayList<>();
for ( String line : logLines )
{
if ( pattern.matcher( line ).matches() )
{
result.add( line );
}
}
return result;
}
}

View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>org.apache.maven.its.mng5222</groupId>
<artifactId>maven-it-mng5222</artifactId>
<version>1.0</version>
<name>Maven Integration Test :: mng5222</name>
<description>
Test that ensures that warning about deprecated mojo params are generated.
</description>
<url>https://www.test.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.its.plugins</groupId>
<artifactId>maven-it-plugin-configuration</artifactId>
<version>2.1-SNAPSHOT</version>
<executions>
<execution>
<goals>
<goal>deprecated-config</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>config-values</id>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.its.plugins</groupId>
<artifactId>maven-it-plugin-configuration</artifactId>
<configuration>
<deprecatedParam>value1</deprecatedParam>
<deprecatedParam2>value2</deprecatedParam2>
<deprecatedParamWithDefaultConstant>value3</deprecatedParamWithDefaultConstant>
<deprecatedParamWithDefaultEvaluate>value4</deprecatedParamWithDefaultEvaluate>
<deprecatedArray>
<item>a1</item>
<item>a2</item>
</deprecatedArray>
<deprecatedArrayWithDefaults>
<item>b1</item>
<item>b2</item>
</deprecatedArrayWithDefaults>
<deprecatedList>
<item>c1</item>
<item>c2</item>
</deprecatedList>
<deprecatedListWithDefaults>
<item>d1</item>
<item>d2</item>
</deprecatedListWithDefaults>
<deprecatedProperties>
<property>
<name>propertyName1</name>
<value>propertyValue1</value>
</property>
<property>
<name>propertyName2</name>
<value>propertyValue2</value>
</property>
</deprecatedProperties>
<deprecatedMap>
<key1>value1</key1>
<key2>value2</key2>
</deprecatedMap>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</profile>
</profiles>
</project>

View File

@ -53,6 +53,11 @@ under the License.
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,185 @@
package org.apache.maven.plugin.coreit;
/*
* 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.io.File;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
/**
* Mojo with deprecated params.
* Dumps this mojo's configuration into a properties file.
*
* @author Slawomir Jaranowski
*/
@Mojo( name = "deprecated-config", defaultPhase = LifecyclePhase.VALIDATE )
public class DeprecatedConfigMojo
extends AbstractMojo
{
/**
* The current project's base directory, used for path alignment.
*/
@Parameter( defaultValue = "${basedir}", readonly = true )
private File basedir;
/**
* The path to the properties file into which to save the mojo configuration.
*/
@Parameter( defaultValue = "${project.build.directory}/config.properties" )
private File propertiesFile;
/**
* A deprecated parameter to be set via plugin configuration in POM.
*
* @deprecated I'm deprecated param
*/
@Deprecated
@Parameter
private String deprecatedParam;
/**
* A deprecated parameter without message to be set via plugin configuration in POM.
*
* @deprecated
*/
@Deprecated
@Parameter( property = "config.deprecatedParam2" )
private String deprecatedParam2;
/**
* A deprecated parameter that defaults to a non-mandatory value from the POM.
*
* @deprecated deprecated with constant value
*/
@Deprecated
@Parameter( defaultValue = "testValue" )
private String deprecatedParamWithDefaultConstant;
/**
* A deprecated parameter that defaults to a non-mandatory value from the POM.
*
* @deprecated deprecated with evaluate value
*/
@Deprecated
@Parameter( defaultValue = "${project.url}" )
private String deprecatedParamWithDefaultEvaluate;
/**
* @deprecated deprecated array
*/
@Deprecated
@Parameter( property = "config.deprecatedArray" )
private String[] deprecatedArray;
/**
* @deprecated deprecated array
*/
@Deprecated
@Parameter( defaultValue = "a1 ,a2, a3" )
private String[] deprecatedArrayWithDefaults;
/**
* @deprecated deprecated map
*/
@Deprecated
@Parameter
private Map<String, String> deprecatedMap;
/**
* @deprecated deprecated properties
*/
@Deprecated
@Parameter
private Properties deprecatedProperties;
/**
* @deprecated deprecated list
*/
@Deprecated
@Parameter( property = "config.deprecatedList" )
private List<String> deprecatedList;
/**
* @deprecated deprecated list
*/
@Deprecated
@Parameter( defaultValue = "l1,l2,l3" )
private List<String> deprecatedListWithDefaults;
/**
* Runs this mojo.
*
* @throws MojoExecutionException If the output file could not be created.
*/
public void execute()
throws MojoExecutionException
{
getLog().info( "[MAVEN-CORE-IT-LOG] Using output file path: " + propertiesFile );
if ( propertiesFile == null )
{
throw new MojoExecutionException( "Path name for output file has not been specified" );
}
if ( !propertiesFile.isAbsolute() )
{
propertiesFile = new File( basedir, propertiesFile.getPath() ).getAbsoluteFile();
}
Properties configProps = new Properties();
dumpConfiguration( configProps );
getLog().info( "[MAVEN-CORE-IT-LOG] Creating output file: " + propertiesFile );
PropertiesUtil.write( propertiesFile, configProps );
getLog().info( "[MAVEN-CORE-IT-LOG] Created output file: " + propertiesFile );
}
/**
* Dumps the mojo configuration into the specified properties.
*
* @param props The properties to dump the configuration into, must not be <code>null</code>.
*/
@SuppressWarnings( "deprecation" )
private void dumpConfiguration( Properties props )
{
PropertiesUtil.serialize( props, "deprecatedParam", deprecatedParam );
PropertiesUtil.serialize( props, "deprecatedParam2", deprecatedParam2 );
PropertiesUtil.serialize( props, "deprecatedParamWithDefaultConstant", deprecatedParamWithDefaultConstant );
PropertiesUtil.serialize( props, "deprecatedParamWithDefaultEvaluate", deprecatedParamWithDefaultEvaluate );
PropertiesUtil.serialize( props, "deprecatedArray", deprecatedArray );
PropertiesUtil.serialize( props, "deprecatedArrayWithDefaults", deprecatedArrayWithDefaults );
PropertiesUtil.serialize( props, "deprecatedProperties", deprecatedProperties );
PropertiesUtil.serialize( props, "deprecatedList", deprecatedList );
PropertiesUtil.serialize( props, "deprecatedListWithDefaults", deprecatedListWithDefaults );
PropertiesUtil.serialize( props, "deprecatedMap", deprecatedMap );
}
}