[
https://issues.apache.org/jira/browse/SUREFIRE-1385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17868181#comment-17868181
]
ASF GitHub Bot commented on SUREFIRE-1385:
------------------------------------------
michael-o commented on code in PR #762:
URL: https://github.com/apache/maven-surefire/pull/762#discussion_r1688677896
##########
maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java:
##########
@@ -319,25 +320,49 @@ public abstract class AbstractSurefireMojo extends
AbstractMojo implements Suref
*/
@Deprecated
@Parameter
- private Properties systemProperties;
+ Properties systemProperties;
/**
* List of System properties to pass to a provider.
* The effective system properties given to a provider are contributed
from several sources:
* <ol>
+ * <li>properties set via {@link #argLine} with {@code -D} (only for
forked executions)</li>
* <li>{@link #systemProperties}</li>
* <li>{@link AbstractSurefireMojo#getSystemPropertiesFile()} (set via
parameter {@code systemPropertiesFile} on some goals)</li>
* <li>{@link #systemPropertyVariables}</li>
- * <li>User properties from {@link MavenSession#getUserProperties()},
usually set via CLI options given with {@code -D}</li>
+ * <li>User properties from {@link MavenSession#getUserProperties()},
usually set via CLI options given with {@code -D} on the current Maven
process</li>
+ * <li>{@link #userPropertyVariables}</li>
* </ol>
* Later sources may overwrite same named properties from earlier sources,
that means for example that one cannot overwrite user properties with either
- * {@link #systemProperties}, {@link
AbstractSurefireMojo#getSystemPropertiesFile()} or {@link
#systemPropertyVariables}.
+ * {@link #systemProperties}, {@link #getSystemPropertiesFile()} or {@link
#systemPropertyVariables} but only with
+ * {@link #userPropertyVariables}.
+ * <p>
+ * Certain properties may only be overwritten via {@link #argLine}
(applicable only for forked executions) because their values are cached and
only evaluated at the start of the JRE.
+ * Those include:
+ * <ul>
+ * <li>{@code java.library.path}</li>
+ * <li>{@code file.encoding}</li>
+ * <li>{@code jdk.map.althashing.threshold}</li>
+ * <li>{@code line.separator}</li>
+ * </ul>
*
* @since 2.5
* @see #systemProperties
*/
@Parameter
- private Map<String, String> systemPropertyVariables;
+ Map<String, String> systemPropertyVariables;
+
+ /**
+ * List of user properties to pass to a provider.
+ * Similar to {@link #systemPropertyVariables} but having a higher
precedence, therefore allows to overwrite user properties from the current
Maven session.
+ * This should only be used in case a user property from the parent
process needs to be explicitly overwritten.
+ * Regular properties should be set via {@link #systemPropertyVariables}
instead in order to allow them to be overwritten
+ * via CLI arguments ({@code -Dmyproperty=myvalue})
+ * @since 3.4
+ * @see #systemPropertyVariables
+ */
+ @Parameter
+ Map<String, String> userPropertyVariables;
Review Comment:
@slawekjaranowski I agree with you that passing user properties by default
is a bad idea.
> System properties defined in the Surefire and Failsafe plugin configuration
> should override user properties
> -----------------------------------------------------------------------------------------------------------
>
> Key: SUREFIRE-1385
> URL: https://issues.apache.org/jira/browse/SUREFIRE-1385
> Project: Maven Surefire
> Issue Type: Improvement
> Components: Maven Failsafe Plugin, Maven Surefire Plugin
> Affects Versions: 2.20
> Reporter: Guillaume Boué
> Assignee: Konrad Windszus
> Priority: Major
>
> Consider a build with the following POM configuration for the Maven Failsafe
> Plugin:
> {code:xml}
> <configuration>
> <systemPropertyVariables>
> <prop>foo</prop>
> </systemPropertyVariables>
> </configuration>
> {code}
> When running the build with the command line {{mvn -Dprop=bar ...}}, the
> tests would be passed a system property with a value of {{bar}} instead of
> {{foo}}.
> This is counter-intuitive since direct configuration of the plugin is
> overriden by the more general properties passed on the command line. I would
> have expected the closer definition in the POM to override the one passed
> with the CLI. Furthermore, in the case of the above sample, it would not be
> possible for the tests run by the Failsafe Plugin to have a system property
> {{prop}} with a value of {{foo}} if the build happens to already define a
> system property with the same name. While using a different name to avoid a
> clash is possible, it still doesn't make the test self-contained and
> consistent since anyone could run Maven with that other name and compromise
> the test that really relies on the system property having a value of {{foo}}.
> The proposal is thus to make the {{systemPropertyVariables}} and
> {{systemPropertiesFile}} configuration elements of the Surefire and Failsafe
> Plugin take precedence over user properties passed on the command line.
> Proposed commit
> [4de017b38b101b0b28f9fbed135eae3921b99d0d|http://git-wip-us.apache.org/repos/asf/maven-surefire/commit/4de017b3]
> on SUREFIRE-1385 branch.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)