From c2ec77f1ef5aa38fa60f89bf9e2011126e396259 Mon Sep 17 00:00:00 2001
From: ptreilhes
Date: Tue, 18 Nov 2025 21:15:24 +0100
Subject: [PATCH 1/2] Added ability to provide arbitrary dependencies to
properties mojo
---
.../plugins/dependency/PropertiesMojo.java | 19 ++++-
.../dependency/TestPropertiesMojo.java | 80 +++++++++++++++----
2 files changed, 84 insertions(+), 15 deletions(-)
diff --git a/src/main/java/org/apache/maven/plugins/dependency/PropertiesMojo.java b/src/main/java/org/apache/maven/plugins/dependency/PropertiesMojo.java
index 22f0d8357..6e46a72a7 100644
--- a/src/main/java/org/apache/maven/plugins/dependency/PropertiesMojo.java
+++ b/src/main/java/org/apache/maven/plugins/dependency/PropertiesMojo.java
@@ -20,11 +20,13 @@
import javax.inject.Inject;
+import java.util.List;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@@ -68,7 +70,7 @@ public PropertiesMojo(MavenProject project) {
/**
* Main entry into mojo. Gets the list of dependencies and iterates through setting a property for each artifact.
- *
+ * Gets the list of declared plugin's dependencies and iterates through setting a property for each artifact.
* @throws MojoExecutionException with a message if an error occurs
*/
@Override
@@ -86,6 +88,21 @@ public void execute() throws MojoExecutionException {
artifact.getDependencyConflictId(),
artifact.getFile().getAbsolutePath());
}
+
+ PluginDescriptor pluginDescriptor = (PluginDescriptor) getPluginContext().get("pluginDescriptor");
+
+ if (pluginDescriptor != null) {
+ List pluginArtifacts = pluginDescriptor.getArtifacts();
+
+ if (pluginArtifacts != null) {
+ for (Artifact artifact : pluginArtifacts) {
+ this.project.getProperties()
+ .setProperty(
+ artifact.getDependencyConflictId(),
+ artifact.getFile().getAbsolutePath());
+ }
+ }
+ }
}
/**
diff --git a/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java b/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java
index 2e3db085f..13fcfbf62 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java
@@ -1,28 +1,47 @@
/*
- * 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
+ * Copyright (c) 2016, 2025, Gluon and/or its affiliates.
+ * Copyright (c) 2021, 2025, Pascal Treilhes and/or its affiliates.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates.
+ * All rights reserved. Use is subject to license terms.
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * This file is available and licensed under the following license:
*
- * 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.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the distribution.
+ * - Neither the name of Oracle Corporation and Gluon nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.apache.maven.plugins.dependency;
import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.descriptor.PluginDescriptor;
import org.apache.maven.plugins.dependency.testUtils.stubs.DependencyProjectStub;
import org.apache.maven.project.MavenProject;
@@ -77,4 +96,37 @@ public void testSetProperties() throws Exception {
assertTrue(artifactFile.isFile());
}
}
+
+ /**
+ * tests the proper discovery and configuration of the mojo for plugin dependencies
+ * Each plugin dependency should set a property in the project
+ * @throws Exception in case of errors
+ */
+ public void testSetPropertiesForPluginDependencies() throws Exception {
+ File testPom = new File(getBasedir(), "target/test-classes/unit/properties-test/plugin-config.xml");
+ PropertiesMojo mojo = (PropertiesMojo) lookupMojo("properties", testPom);
+
+ assertNotNull(mojo);
+ MavenProject project = (MavenProject) getVariableValueFromObject(mojo, "project");
+ assertNotNull(project);
+
+ Set artifacts = this.stubFactory.getScopedArtifacts();
+ Set directArtifacts = this.stubFactory.getReleaseAndSnapshotArtifacts();
+ artifacts.addAll(directArtifacts);
+
+ PluginDescriptor pluginDescriptor = new PluginDescriptor();
+ pluginDescriptor.setArtifacts(new ArrayList<>());
+ Map pluginContext = new HashMap<>();
+ pluginContext.put("pluginDescriptor", pluginDescriptor);
+ mojo.setPluginContext(pluginContext);
+
+ mojo.execute();
+
+ for (Artifact artifact : artifacts) {
+ File artifactFile = artifact.getFile();
+ String depId = artifact.getDependencyConflictId();
+ assertTrue(project.getProperties().containsKey(depId));
+ assertTrue(project.getProperties().getProperty(depId).equals(artifactFile.getAbsolutePath()));
+ }
+ }
}
From 031ee17608707b553d1501088b8b392e03d9c638 Mon Sep 17 00:00:00 2001
From: ptreilhes
Date: Tue, 18 Nov 2025 23:02:10 +0100
Subject: [PATCH 2/2] removed wrong header, restored maven one
---
.../dependency/TestPropertiesMojo.java | 43 ++++++-------------
1 file changed, 14 insertions(+), 29 deletions(-)
diff --git a/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java b/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java
index 13fcfbf62..9baf0ea38 100644
--- a/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java
+++ b/src/test/java/org/apache/maven/plugins/dependency/TestPropertiesMojo.java
@@ -1,35 +1,20 @@
/*
- * Copyright (c) 2016, 2025, Gluon and/or its affiliates.
- * Copyright (c) 2021, 2025, Pascal Treilhes and/or its affiliates.
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates.
- * All rights reserved. Use is subject to license terms.
+ * 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
*
- * This file is available and licensed under the following license:
+ * http://www.apache.org/licenses/LICENSE-2.0
*
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the distribution.
- * - Neither the name of Oracle Corporation and Gluon nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * 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.
*/
package org.apache.maven.plugins.dependency;