repositories = state.getRepositories();
+ RemoteRepository mergedCentral = repositories.stream()
+ .filter(r -> "central".equals(r.getId()))
+ .findFirst()
+ .orElseThrow();
+ assertEquals(
+ central.getUrl(),
+ mergedCentral.getUrl(),
+ "repository declared by a resolved model must be merged recessively, keeping the"
+ + " existing repository's URL under a shared id");
+ assertTrue(
+ repositories.stream().noneMatch(r -> r.getUrl().contains("secondary.example")),
+ "repository declared by a resolved model must not enter the resolution repositories"
+ + " under an id it does not own");
+ }
+
/**
* Verifies that when multiple repositories share the same ID (e.g., after mirror injection
* maps both "central" and a profile-defined repo to the same mirror ID), their policies are
@@ -970,6 +1311,126 @@ public void testBomTypeImpliesImportWithoutScope() {
assertEquals("0.1", managed.getVersion());
}
+ /**
+ * Dependency management imported from a repository-resolved POM does not contribute
+ * {@code system} scope or a {@code systemPath}; such entries are dropped with a warning.
+ *
+ * The imported BOM is written into a temporary remote repository at run time, with a
+ * {@code systemPath} that is a real absolute path on whichever OS the test runs on
+ * (a POSIX-only path such as {@code /etc/...} is not absolute on Windows, which would make
+ * model validation reject the entry before the code under test ever ran).
+ */
+ @Test
+ public void testSystemScopeIgnoredOutsideProjectDeclaration(@TempDir Path tempDir) throws Exception {
+ Path basedir = Paths.get(System.getProperty("basedir", ""));
+ Path remoteRepoPath = tempDir.resolve("remote-repo");
+ Path bomDir = remoteRepoPath.resolve("org/apache/maven/its/system-scope-bom/1.0");
+ Files.createDirectories(bomDir);
+
+ Path systemPathFile = tempDir.resolve("provided-tool.jar");
+ Files.createFile(systemPathFile);
+
+ String bomPom = "\n" + "\n"
+ + " 4.0.0\n"
+ + " org.apache.maven.its\n"
+ + " system-scope-bom\n"
+ + " 1.0\n"
+ + " pom\n"
+ + " \n"
+ + " \n"
+ + " \n"
+ + " org.apache.maven.its\n"
+ + " system-scope-companion\n"
+ + " 1.0\n"
+ + " \n"
+ + " \n"
+ + " org.apache.maven.its\n"
+ + " system-scope-dep\n"
+ + " 1.0\n"
+ + " system\n"
+ + " "
+ + systemPathFile.toAbsolutePath() + "\n" + " \n"
+ + " \n"
+ + " \n"
+ + "\n";
+ Files.writeString(bomDir.resolve("system-scope-bom-1.0.pom"), bomPom);
+
+ // default: the build succeeds, the offending entry is dropped, and a warning is emitted
+ Path localRepoPath = basedir.resolve("target/local-repo-system-scope-bom-reject");
+ Session rejectSession = ApiRunner.createSession(
+ injector -> injector.bindInstance(DefaultModelBuilderTest.class, this), localRepoPath);
+ RemoteRepository remoteRepository = rejectSession.createRemoteRepository(
+ RemoteRepository.CENTRAL_ID, remoteRepoPath.toUri().toString());
+ rejectSession = rejectSession.withRemoteRepositories(List.of(remoteRepository));
+ ModelBuilder rejectBuilder = rejectSession.getService(ModelBuilder.class);
+
+ ModelBuilderRequest request = ModelBuilderRequest.builder()
+ .session(rejectSession)
+ .requestType(ModelBuilderRequest.RequestType.BUILD_PROJECT)
+ .source(Sources.buildSource(getPom("import-system-scope-bom")))
+ .build();
+ ModelBuilderResult rejectResult = rejectBuilder.newSession().build(request);
+ DependencyManagement rejectManagement = rejectResult.getEffectiveModel().getDependencyManagement();
+ assertNotNull(
+ rejectManagement.getDependencies().stream()
+ .filter(d -> "system-scope-companion".equals(d.getArtifactId()))
+ .findFirst()
+ .orElse(null),
+ "The import itself must have happened: the ordinary managed entry from the "
+ + "imported BOM should be present");
+ Dependency rejected = rejectManagement.getDependencies().stream()
+ .filter(d -> "system-scope-dep".equals(d.getArtifactId()))
+ .findFirst()
+ .orElse(null);
+ assertNull(rejected, "By default the 'system' scope managed entry should not be imported");
+ assertTrue(
+ rejectResult
+ .getProblemCollector()
+ .problems()
+ .anyMatch(p -> p.getSeverity() == BuilderProblem.Severity.WARNING
+ && p.getMessage().contains("'system' scope or 'systemPath'")
+ && p.getMessage()
+ .contains(Constants.MAVEN_REPOSITORY_DEPENDENCY_MANAGEMENT_ALLOW_SYSTEM_SCOPE)),
+ "Expected a warning about 'system' scope in the repository-imported BOM");
+
+ // explicit opt-out (fresh session/local repo, so the sanitized import is not served from the cache)
+ Path allowedLocalRepoPath = basedir.resolve("target/local-repo-system-scope-bom-allow");
+ Session allowedSession = ApiRunner.createSession(
+ injector -> injector.bindInstance(DefaultModelBuilderTest.class, this), allowedLocalRepoPath);
+ allowedSession = allowedSession.withRemoteRepositories(List.of(allowedSession.createRemoteRepository(
+ RemoteRepository.CENTRAL_ID, remoteRepoPath.toUri().toString())));
+ ModelBuilder allowedBuilder = allowedSession.getService(ModelBuilder.class);
+
+ ModelBuilderRequest allowed = ModelBuilderRequest.builder()
+ .session(allowedSession)
+ .requestType(ModelBuilderRequest.RequestType.BUILD_PROJECT)
+ .userProperties(Map.of(Constants.MAVEN_REPOSITORY_DEPENDENCY_MANAGEMENT_ALLOW_SYSTEM_SCOPE, "true"))
+ .source(Sources.buildSource(getPom("import-system-scope-bom")))
+ .build();
+ ModelBuilderResult result = allowedBuilder.newSession().build(allowed);
+ DependencyManagement allowedManagement = result.getEffectiveModel().getDependencyManagement();
+ assertNotNull(
+ allowedManagement.getDependencies().stream()
+ .filter(d -> "system-scope-companion".equals(d.getArtifactId()))
+ .findFirst()
+ .orElse(null),
+ "The import itself must have happened: the ordinary managed entry from the "
+ + "imported BOM should be present");
+ Dependency managed = allowedManagement.getDependencies().stream()
+ .filter(d -> "system-scope-dep".equals(d.getArtifactId()))
+ .findFirst()
+ .orElse(null);
+ assertNotNull(managed, "With the opt-out property the managed entry should be imported");
+ assertEquals("system", managed.getScope());
+ assertTrue(
+ result.getProblemCollector()
+ .problems()
+ .anyMatch(p -> p.getSeverity() == BuilderProblem.Severity.WARNING
+ && p.getMessage()
+ .contains(Constants.MAVEN_REPOSITORY_DEPENDENCY_MANAGEMENT_ALLOW_SYSTEM_SCOPE)),
+ "Opting out should still emit a warning about the imported 'system' scope");
+ }
+
@Test
void testBomImportWarningsReportedWhereImportsAreDeclared() {
Path pom = Paths.get("src/test/resources/poms/factory/mng-8450/pom.xml").toAbsolutePath();
diff --git a/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelInterpolatorTest.java b/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelInterpolatorTest.java
index 065bc79ecd5e..4ee3e14c599d 100644
--- a/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelInterpolatorTest.java
+++ b/impl/maven-impl/src/test/java/org/apache/maven/impl/model/DefaultModelInterpolatorTest.java
@@ -36,6 +36,7 @@
import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
+import org.apache.maven.api.Constants;
import org.apache.maven.api.Session;
import org.apache.maven.api.di.Priority;
import org.apache.maven.api.di.Provides;
@@ -48,6 +49,7 @@
import org.apache.maven.api.model.Scm;
import org.apache.maven.api.services.Lookup;
import org.apache.maven.api.services.ModelBuilderRequest;
+import org.apache.maven.api.services.Sources;
import org.apache.maven.api.services.model.ModelInterpolator;
import org.apache.maven.api.services.model.RootLocator;
import org.apache.maven.impl.model.profile.SimpleProblemCollector;
@@ -443,6 +445,101 @@ public void testEnvars() throws Exception {
assertEquals("/path/to/home", out.getProperties().get("outputDirectory"));
}
+ @Test
+ public void testDependencyModelInterpolationUsesRestrictedPropertySet() throws Exception {
+ context.put("env.HOME", "/path/to/home");
+ context.put("some.property", "other-value");
+ context.put("java.version", "21");
+
+ Map modelProperties = new HashMap<>();
+ modelProperties.put("envDir", "${env.HOME}");
+ modelProperties.put("propDir", "${some.property}");
+ modelProperties.put("jdk", "${java.version}");
+
+ Model model = Model.newBuilder().properties(modelProperties).build();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ ModelBuilderRequest request = createModelBuildingRequest(context)
+ .requestType(ModelBuilderRequest.RequestType.CONSUMER_DEPENDENCY)
+ .source(Sources.resolvedSource(Paths.get("."), "org.apache.maven.test:dependency:1.0.0"))
+ .build();
+ Model out = interpolator.interpolateModel(model, Paths.get("."), request, collector);
+ assertProblemFree(collector);
+
+ // A model built while resolving a dependency POM from a repository does not interpolate
+ // environment variables or arbitrary system/user properties...
+ assertEquals("${env.HOME}", out.getProperties().get("envDir"));
+ assertEquals("${some.property}", out.getProperties().get("propDir"));
+ // ...while JVM-defined and other well-known expressions keep resolving.
+ assertEquals("21", out.getProperties().get("jdk"));
+ }
+
+ @Test
+ public void testParentModelInterpolationUsesRestrictedPropertySet() throws Exception {
+ context.put("env.HOME", "/path/to/home");
+
+ Map modelProperties = new HashMap<>();
+ modelProperties.put("envDir", "${env.HOME}");
+
+ Model model = Model.newBuilder().properties(modelProperties).build();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ ModelBuilderRequest request = createModelBuildingRequest(context)
+ .requestType(ModelBuilderRequest.RequestType.CONSUMER_PARENT)
+ .source(Sources.resolvedSource(Paths.get("."), "org.apache.maven.test:parent:1.0.0"))
+ .build();
+ Model out = interpolator.interpolateModel(model, Paths.get("."), request, collector);
+ assertProblemFree(collector);
+
+ assertEquals("${env.HOME}", out.getProperties().get("envDir"));
+ }
+
+ @Test
+ public void testCallerSuppliedModelInterpolationIsNotRestricted() throws Exception {
+ context.put("env.HOME", "/path/to/home");
+ context.put("some.property", "other-value");
+
+ Map modelProperties = new HashMap<>();
+ modelProperties.put("envDir", "${env.HOME}");
+ modelProperties.put("propDir", "${some.property}");
+
+ Model model = Model.newBuilder().properties(modelProperties).build();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ // A POM the caller hands to Maven as a file arrives with the same CONSUMER_DEPENDENCY
+ // request type as a dependency POM resolved from a repository, but its source is not
+ // one Maven resolved -- so the restricted property set above does not apply to it.
+ ModelBuilderRequest request = createModelBuildingRequest(context)
+ .requestType(ModelBuilderRequest.RequestType.CONSUMER_DEPENDENCY)
+ .source(Sources.buildSource(Paths.get(".")))
+ .build();
+ Model out = interpolator.interpolateModel(model, Paths.get("."), request, collector);
+ assertProblemFree(collector);
+
+ assertEquals("/path/to/home", out.getProperties().get("envDir"));
+ assertEquals("other-value", out.getProperties().get("propDir"));
+ }
+
+ @Test
+ public void testFullInterpolationOptOutRestoresPreviousBehaviorForResolvedDependencyModel() throws Exception {
+ context.put("env.HOME", "/path/to/home");
+ context.put(Constants.MAVEN_MODEL_DEPENDENCY_INTERPOLATION_FULL, "true");
+
+ Map modelProperties = new HashMap<>();
+ modelProperties.put("envDir", "${env.HOME}");
+
+ Model model = Model.newBuilder().properties(modelProperties).build();
+
+ final SimpleProblemCollector collector = new SimpleProblemCollector();
+ ModelBuilderRequest request = createModelBuildingRequest(context)
+ .requestType(ModelBuilderRequest.RequestType.CONSUMER_DEPENDENCY)
+ .build();
+ Model out = interpolator.interpolateModel(model, Paths.get("."), request, collector);
+ assertProblemFree(collector);
+
+ assertEquals("/path/to/home", out.getProperties().get("envDir"));
+ }
+
@Test
public void envarExpressionThatEvaluatesToNullReturnsTheLiteralString() throws Exception {
diff --git a/impl/maven-impl/src/test/resources/poms/factory/import-system-scope-bom.xml b/impl/maven-impl/src/test/resources/poms/factory/import-system-scope-bom.xml
new file mode 100644
index 000000000000..616bb010e51f
--- /dev/null
+++ b/impl/maven-impl/src/test/resources/poms/factory/import-system-scope-bom.xml
@@ -0,0 +1,35 @@
+
+
+
+ org.apache.maven.tests
+ import-system-scope-bom
+ 1.0-SNAPSHOT
+ jar
+
+
+
+
+ org.apache.maven.its
+ system-scope-bom
+ 1.0
+ pom
+ import
+
+
+
+
diff --git a/impl/maven-impl/src/test/resources/poms/factory/resolved-model-with-profiles.xml b/impl/maven-impl/src/test/resources/poms/factory/resolved-model-with-profiles.xml
new file mode 100644
index 000000000000..46a923eba6de
--- /dev/null
+++ b/impl/maven-impl/src/test/resources/poms/factory/resolved-model-with-profiles.xml
@@ -0,0 +1,71 @@
+
+
+
+ org.apache.maven.tests
+ resolved-model-with-profiles
+ 1.0-SNAPSHOT
+ pom
+
+
+ file-condition
+
+
+ ${some.dir}
+
+
+
+ activated
+
+
+
+ property-condition
+
+
+ some.gating.property
+
+
+
+ activated
+
+
+
+ condition-condition
+
+ ${some.condition.property} == 'true'
+
+
+ activated
+
+
+
+ jdk-condition
+
+ [1,)
+
+
+ activated
+
+
+
+ profile-repo
+ https://repo.example.test/profile
+
+
+
+
+
diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenIT0085TransitiveSystemScopeTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenIT0085TransitiveSystemScopeTest.java
index 62d9900f3299..71a8c9376a67 100644
--- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenIT0085TransitiveSystemScopeTest.java
+++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenIT0085TransitiveSystemScopeTest.java
@@ -24,6 +24,7 @@
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
public class MavenIT0085TransitiveSystemScopeTest extends AbstractMavenIntegrationTestCase {
@@ -48,10 +49,40 @@ public void testit0085() throws Exception {
verifier.addCliArgument("--settings");
verifier.addCliArgument("settings.xml");
verifier.addCliArgument("validate");
+ verifier.addCliArgument("-Dmaven.model.dependencyInterpolation.full=true");
verifier.execute();
verifier.verifyErrorFreeLog();
Collection lines = verifier.loadLines("target/test.txt");
assertTrue(lines.contains("system.jar"), lines.toString());
}
+
+ /**
+ * Verify that by default the path of a system-scope dependency declared by a POM resolved from a
+ * repository is not interpolated from the session properties, so the expression is left as
+ * written and reported as an invalid path.
+ *
+ * @throws Exception in case of failure
+ */
+ @Test
+ public void testit0085DefaultLeavesPropertyUnresolved() throws Exception {
+ Path testDir = extractResources("it0085");
+
+ Verifier verifier = newVerifier(testDir);
+ verifier.setAutoclean(false);
+ verifier.deleteDirectory("target");
+ verifier.deleteArtifacts("org.apache.maven.its.it0085");
+ verifier.getSystemProperties().setProperty("test.home", testDir.toString());
+ verifier.filterFile("settings-template.xml", "settings.xml");
+ verifier.addCliArgument("--settings");
+ verifier.addCliArgument("settings.xml");
+ verifier.addCliArgument("validate");
+ try {
+ verifier.execute();
+ verifier.verifyErrorFreeLog();
+ fail("Build should not succeed");
+ } catch (VerificationException e) {
+ verifier.verifyTextInLog("must specify an absolute path but is ${test.home}/system.jar");
+ }
+ }
}
diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3586SystemScopePluginDependencyTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3586SystemScopePluginDependencyTest.java
index d1c94cb7eedd..d2f2a12af256 100644
--- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3586SystemScopePluginDependencyTest.java
+++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng3586SystemScopePluginDependencyTest.java
@@ -24,6 +24,7 @@
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* This is a test set for MNG-3586.
@@ -52,6 +53,7 @@ public void testitFromPlugin() throws Exception {
verifier.addCliArgument("--settings");
verifier.addCliArgument("settings.xml");
verifier.addCliArgument("validate");
+ verifier.addCliArgument("-Dmaven.model.dependencyInterpolation.full=true");
verifier.execute();
verifier.verifyErrorFreeLog();
@@ -80,4 +82,33 @@ public void testitFromProject() throws Exception {
Properties props = verifier.loadProperties("target/pcl.properties");
assertEquals("1", props.getProperty("maven-core-it.properties.count"));
}
+
+ /**
+ * Test that by default a plugin POM resolved from a repository does not interpolate the path of
+ * its system-scope dependency from the session properties, so the expression is left as written
+ * and reported as an invalid path.
+ *
+ * @throws Exception in case of failure
+ */
+ @Test
+ public void testitFromPluginDefaultLeavesPropertyUnresolved() throws Exception {
+ Path testDir = extractResources("mng-3586/test-1");
+
+ Verifier verifier = newVerifier(testDir);
+ verifier.setAutoclean(false);
+ verifier.deleteDirectory("target");
+ verifier.deleteArtifacts("org.apache.maven.its.mng3586");
+ verifier.getSystemProperties().setProperty("test.home", testDir.toString());
+ verifier.filterFile("settings-template.xml", "settings.xml");
+ verifier.addCliArgument("--settings");
+ verifier.addCliArgument("settings.xml");
+ verifier.addCliArgument("validate");
+ try {
+ verifier.execute();
+ verifier.verifyErrorFreeLog();
+ fail("Build should not succeed");
+ } catch (VerificationException e) {
+ verifier.verifyTextInLog("must specify an absolute path but is ${test.home}/tools.jar");
+ }
+ }
}
diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4379TransitiveSystemPathInterpolatedWithEnvVarTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4379TransitiveSystemPathInterpolatedWithEnvVarTest.java
index 7835cb31efb0..620a9c26a874 100644
--- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4379TransitiveSystemPathInterpolatedWithEnvVarTest.java
+++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4379TransitiveSystemPathInterpolatedWithEnvVarTest.java
@@ -24,6 +24,7 @@
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* This is a test set for MNG-4379.
@@ -51,10 +52,40 @@ public void testit() throws Exception {
verifier.addCliArgument("-s");
verifier.addCliArgument("settings.xml");
verifier.addCliArguments("validate");
+ verifier.addCliArgument("-Dmaven.model.dependencyInterpolation.full=true");
verifier.execute();
verifier.verifyErrorFreeLog();
List classpath = verifier.loadLines("target/classpath.txt");
assertTrue(classpath.contains("pom.xml"), classpath.toString());
}
+
+ /**
+ * Test that by default the path of a system-scope dependency declared by a POM resolved from a
+ * repository is not interpolated using environment variables, so the expression is left as
+ * written and reported as an invalid path.
+ *
+ * @throws Exception in case of failure
+ */
+ @Test
+ public void testitDefaultLeavesEnvironmentVariableUnresolved() throws Exception {
+ Path testDir = extractResources("mng-4379");
+
+ Verifier verifier = newVerifier(testDir);
+ verifier.setAutoclean(false);
+ verifier.deleteDirectory("target");
+ verifier.deleteArtifacts("org.apache.maven.its.mng4379");
+ verifier.filterFile("settings-template.xml", "settings.xml");
+ verifier.setEnvironmentVariable("MNG_4379_HOME", testDir.toString());
+ verifier.addCliArgument("-s");
+ verifier.addCliArgument("settings.xml");
+ verifier.addCliArguments("validate");
+ try {
+ verifier.execute();
+ verifier.verifyErrorFreeLog();
+ fail("Build should not succeed");
+ } catch (VerificationException e) {
+ verifier.verifyTextInLog("must specify an absolute path but is ${env.MNG_4379_HOME}/pom.xml");
+ }
+ }
}
diff --git a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4590ImportedPomUsesSystemAndUserPropertiesTest.java b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4590ImportedPomUsesSystemAndUserPropertiesTest.java
index bba1bf13875c..c22c0e16a329 100644
--- a/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4590ImportedPomUsesSystemAndUserPropertiesTest.java
+++ b/its/core-it-suite/src/test/java/org/apache/maven/it/MavenITmng4590ImportedPomUsesSystemAndUserPropertiesTest.java
@@ -51,6 +51,8 @@ public void testit() throws Exception {
verifier.addCliArgument("--settings");
verifier.addCliArgument("settings.xml");
verifier.addCliArgument("validate");
+ verifier.addCliArgument("-Dmaven.repository.dependencyManagement.allowSystemScope=true");
+ verifier.addCliArgument("-Dmaven.model.dependencyInterpolation.full=true");
verifier.execute();
verifier.verifyErrorFreeLog();
@@ -61,4 +63,31 @@ public void testit() throws Exception {
testDir.resolve("pom.xml"),
Path.of(props.getProperty("project.dependencyManagement.dependencies.0.systemPath")));
}
+
+ /**
+ * Verify that by default a POM imported from a repository contributes no managed dependency
+ * that declares {@code system} scope or a {@code systemPath}.
+ *
+ * @throws Exception in case of failure
+ */
+ @Test
+ public void testitDefaultOmitsSystemScopedManagedDependency() throws Exception {
+ Path testDir = extractResources("mng-4590");
+
+ Verifier verifier = newVerifier(testDir);
+ verifier.setAutoclean(false);
+ verifier.deleteDirectory("target");
+ verifier.deleteArtifacts("org.apache.maven.its.mng4590");
+ verifier.filterFile("settings-template.xml", "settings.xml");
+ verifier.setEnvironmentVariable("MAVEN_OPTS", "-Dtest.file=pom.xml");
+ verifier.addCliArgument("-Dtest.dir=" + testDir.toString());
+ verifier.addCliArgument("--settings");
+ verifier.addCliArgument("settings.xml");
+ verifier.addCliArgument("validate");
+ verifier.execute();
+ verifier.verifyErrorFreeLog();
+
+ Properties props = verifier.loadProperties("target/pom.properties");
+ assertEquals("0", props.getProperty("project.dependencyManagement.dependencies"));
+ }
}