You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Tibor Digana (Jira)" <ji...@apache.org> on 2020/07/09 09:24:00 UTC
[jira] [Comment Edited] (SUREFIRE-1431) @{argLine} not replaced if
undefined
[ https://issues.apache.org/jira/browse/SUREFIRE-1431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17154379#comment-17154379 ]
Tibor Digana edited comment on SUREFIRE-1431 at 7/9/20, 9:23 AM:
-----------------------------------------------------------------
[~benze]
[~vmassol]
If you specify what exactly is broken then it might be fixed or you can fix it as a contributor on Github and i can guide you in the code.
But referencing itself
{noformat}
<argLine>@{argLine} -Xmx1024m</argLine>
{noformat}
is strange. The (at) is not understood by Maven therefore Surefire is using it as a symbol for replacement with peroperty defined in POM. The @{argLine} should not be here.
If you want to use it with JaCoCo, do it like this
<argLine>${jvm.args.tests} ${jacoco.agent}</argLine>
and configure the JaCoCo plugin as follows:
{noformat}
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>jacoco-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
<configuration>
<propertyName>jacoco.agent</propertyName>
</configuration>
</plugin>
{noformat}
If you want to reference argLine in the tests, you can by defining extra property in <properties/> and filling out the <systemProperties/>.
If you want to use (at) follow the principal in our integration tets:
{noformat}
<?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 xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>it-parent</artifactId>
<version>1.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>org.apache.maven.plugins.surefire</groupId>
<artifactId>testArgProperties</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Test for late replacement argLine properties.</name>
<properties>
<from.prop>from-prop-value</from.prop>
<override.prop>not-override-prop-value</override.prop>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<id>default</id>
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/src/test/resources/it.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dp1=@{from.prop} -Dp2=@{override.prop} -Dp3=@{undefined.prop} -Dp4=@{generated.prop}</argLine>
</configuration>
</plugin>
</plugins>
</build>
</project>
{noformat}
was (Author: tibor17):
[~benze]
[~vmassol]
If you specify what exactly is broken then it might be fixed or you can fix it as a contributor on Github and i can guide you in the code.
But referencing itself
{noformat}
<argLine>@{argLine} -Xmx1024m</argLine>
{noformat}
{noformat}
is strange. The (at) is not understood by Maven therefore Surefire is using it as a symbol for replacement with peroperty defined in POM. The @{argLine} should not be here.
If you want to use it with JaCoCo, do it like this
<argLine>${jvm.args.tests} ${jacoco.agent}</argLine>
and configure the JaCoCo plugin as follows:
{noformat}
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<executions>
<execution>
<id>jacoco-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
<configuration>
<propertyName>jacoco.agent</propertyName>
</configuration>
</plugin>
{noformat}
If you want to reference argLine in the tests, you can by defining extra property in <properties/> and filling out the <systemProperties/>.
If you want to use (at) follow the principal in our integration tets:
{noformat}
<?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 xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>it-parent</artifactId>
<version>1.0</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>org.apache.maven.plugins.surefire</groupId>
<artifactId>testArgProperties</artifactId>
<version>1.0-SNAPSHOT</version>
<name>Test for late replacement argLine properties.</name>
<properties>
<from.prop>from-prop-value</from.prop>
<override.prop>not-override-prop-value</override.prop>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<id>default</id>
<phase>validate</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/src/test/resources/it.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<forkMode>once</forkMode>
<argLine>-Dp1=@{from.prop} -Dp2=@{override.prop} -Dp3=@{undefined.prop} -Dp4=@{generated.prop}</argLine>
</configuration>
</plugin>
</plugins>
</build>
</project>
{noformat}
> @{argLine} not replaced if undefined
> ------------------------------------
>
> Key: SUREFIRE-1431
> URL: https://issues.apache.org/jira/browse/SUREFIRE-1431
> Project: Maven Surefire
> Issue Type: Bug
> Components: Maven Surefire Plugin
> Affects Versions: 2.21.1
> Environment: Maven 3.5.0
> Reporter: Matthieu Fillon
> Assignee: Tibor Digana
> Priority: Major
> Attachments: maven.log
>
>
> I need to specify argLine for my tests. I also need it to work with Java agent Jacoco when a certain Maven profile is activated.
> So I added `@{argLine}` to my argLine property and it works fine when running with Jacoco agent activated.
> When running the tests without profile that activates Jacoco agent, the surefire plugin fails with following line (relevant maven logs attached) :
> {color:red}Error: Could not find or load main class @\{argLine} {color}
> I guess @{argLine} is only replaced if an argLine has been defined before by another plugin but if not it is not replaced at all.
> Should'nt it be replaced in any case and if none defined, just replace with empty value?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)