[
https://issues.apache.org/jira/browse/MNG-2496?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17824414#comment-17824414
]
Jörg Hohwiller edited comment on MNG-2496 at 3/7/24 1:46 PM:
-------------------------------------------------------------
> I am unsure what scenario would require "omit the version of dependency" from
> plugin...
It is the same why {{dependencyManagement}} exists at all:
In complex multi-module projects you want to centralize dependencies/versions
to establish some governance and simplify updates that can be made in a central
place.
So the example would be that I use a cross-cutting library say "commons-lang3"
and I need this as dependency in 3 different child POMs.
So instead of putting the version redundantly in those 3 places, I just want to
have it in my top-level parent POM in the {{dependencyManagement}} what is
exactly the idea why maven introduced this element to the POM model.
So either maven should argue that the {{dependencyManagement}} element should
be dropped from the POM model or if it is present, then the behavior and
feature should be available to all dependencies no matter if a plugin or a
project dependency. Everything is inconsistent and not intuitive.
Please be aware that nowadays developers are dealing with security updates
daily due to tons of CVEs flooding us. So I need to make it as simple as
possible to update from x.y.z to x.y.(z+1).
was (Author: hohwille):
> I am unsure what scenario would require "omit the version of dependency" from
> plugin...
It is the same why {{dependencyManagement}} exists at all:
In complex multi-module projects you want to centralize dependencies/versions
to establish some governance and simplify updates that can be made in a central
place.
So the example would be that I use a cross-cutting library say "commons-lang3"
and I need this as dependency in 3 different child POMs.
So instead of putting the version redundantly in those 3 places, I just want to
have it in my top-level parent POM in the {{dependencyManagement}} what is
exactly the idea why maven introduced this element to the POM model.
So either maven should argue that the {{dependencyManagement}} element should
be dropped from the POM model or if it is present, then the behavior and
feature should be available to all dependencies no matter if a plugin or a
project dependency.
Please be aware that nowadays developers are dealing with security updates
daily due to tons of CVEs flooding us. So I need to make it as simple as
possible to update from x.y.z to x.y.(z+1).
> dependencyManagement not used for dependencies in plugin section.
> -----------------------------------------------------------------
>
> Key: MNG-2496
> URL: https://issues.apache.org/jira/browse/MNG-2496
> Project: Maven
> Issue Type: Bug
> Components: Artifacts and Repositories
> Affects Versions: 2.0.4
> Reporter: Brian E Fox
> Priority: Major
>
> In my parent, I have a dependencyManagement set with this jar:
> <dependencyManagement>
> <dependencies>
> <dependency>
> <groupId>com.stchome.build.maven</groupId>
> <artifactId>testng-initializer</artifactId>
> <version>1.0</version>
> <scope>test</scope>
> </dependency>
> I have a plugin specified that had a dependency like this:
> <plugin>
> <artifactId>maven-antrun-plugin</artifactId>
> <executions>
> <execution>
> <id>run-testng</id>
> <phase>test</phase>
> <configuration>
> <tasks>
> <java
> classname="com.stchome.testng.initializer.PackageInitializer">
> <arg
> path="${project.build.testOutputDirectory}"/>
> <arg
> path="${project.build.testSourceDirectory}"/>
> </java>
> <ant antfile="run-testng.xml"
> inheritRefs="true" inheritAll="true">
> <property name="target.dir"
> value="${project.build.directory}"/>
> <property name="test-classes.dir"
> value="${project.build.testOutputDirectory}"/>
> <property name="test-source.dir"
> value="${project.build.testSourceDirectory}"/>
> </ant>
> </tasks>
> </configuration>
> <goals>
> <goal>run</goal>
> </goals>
> </execution>
> </executions>
> <dependencies>
> <dependency>
> <groupId>com.stchome.build.maven</groupId>
> <artifactId>testng-initializer</artifactId>
> </dependency>
> </dependencies>
> </plugin>
> When I build, it doesn't seem to resolve this dependency version from
> dependencyManagement
> [INFO] An invalid artifact was detected.
> This artifact might be in your project's POM, or it might have been included
> transitively du
> information we do have for this artifact:
> o GroupID: com.stchome.build.maven
> o ArtifactID: testng-initializer
> o Version: <<< MISSING >>>
> o Type: jar
> [INFO]
> ------------------------------------------------------------------------
> [INFO] Trace
> org.apache.maven.artifact.InvalidArtifactRTException: For artifact
> {com.stchome.build.maven:
> n cannot be empty.
> at
> org.apache.maven.artifact.DefaultArtifact.validateIdentity(DefaultArtifact.java:1
> at
> org.apache.maven.artifact.DefaultArtifact.<init>(DefaultArtifact.java:119)
> at
> org.apache.maven.artifact.factory.DefaultArtifactFactory.createArtifact(DefaultAr
> at
> org.apache.maven.artifact.factory.DefaultArtifactFactory.createDependencyArtifact
> at
> org.apache.maven.project.artifact.MavenMetadataSource.createArtifacts(MavenMetada
> at
> org.apache.maven.plugin.DefaultPluginManager.addPlugin(DefaultPluginManager.java:
> at
> org.apache.maven.plugin.DefaultPluginManager.verifyVersionedPlugin(DefaultPluginM
> at
> org.apache.maven.plugin.DefaultPluginManager.verifyPlugin(DefaultPluginManager.ja
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.verifyPlugin(DefaultLifecycle
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.bindPluginToLifecycle(Default
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.constructLifecycleMappings(De
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleE
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLi
> at
> org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecu
> at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
> at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
> at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
> at java.lang.reflect.Method.invoke(Method.java:324)
> at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
> at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
> at
> org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
> at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)