First, you are right... I misread.  When I look at the maven plugins in pluginManagement I see v2 and v3:  clean=3.1.0, compiler=3.8.1, surefire=2.22.1, jar=3.0.2, install=2.5.2, deploy=2.8.2, site=3.7.1, project-info-reports=3.0.0.  Still, it is > 2.0 so LATEST is no longer supported as a version tag.

Let's see if I can explain it better:

- I emptied the local maven repository of every single one of my projects, literally went in the folder net/myorg and deleted everything from there.

- Then I rebuilt in order.  This included app1 and app2 (that has app1 as one of its dependencies) which showed up in the local repository folder.  Obviously, both generated snapshot jars had a timestamp of yesterday.

- Finally I opened app2-0.0.1-SNAPSHOT.jar and looked for the included app1-0.0.1-SNAPSHOT.jar file.  I expected to see yesterday's timestamp on the JAR file since I had just done a maven clean install.  Nope, it had a January timestamp, and the contents were old.

So, it is clear that:

(1) IntelliJ is caching the JARs it uses for a project somewhere.  And giving it the commands to reload dependencies or the POM fail if the version number has not changed... since I am seeing a file from January.  Also, the IntelliJ setting "Always update snapshots" fails as well.  This may be an Maven issue or it might be a quirk of IntelliJ, my suspicion is that IntelliJ relied on the old 2.x maven behavior for that setting.  Sadly I am not knowledgeable enough to know.

(2) Looking for an alternative all I found for 3.0 and above Maven was the use of version ranges in the dependency entry of the app2 POM.  That would require updating the version after even a tiny change in app1, but at least it would not require updating the version in the the pom of the myriad of "app2"s that we have, unless we wanted to.  I suspect this is what versions-maven-plugin does but that I botched it when I tried to use it, as its documentation is very confusing for a beginner and they don't provide a single complete example of a POM that uses it.  The symptom was an error popping up in the POM itself, long before trying to do a build.  I think the error was either the "<version>[0.0.1, 0.0.999)-SNAPSHOT</version>" tag, or my missing something in plugin management.

Conclusion:

It seems that the cleanest way to solve this is to use the versions-maven-plugin, but I am not using it right.  Any help on this would be great.  A simple working example of a POM that uses version-maven-plugin with a version range would be ideal.


On 9/23/2022 1:25 PM, Nils Breunese wrote:
Hi Bruno,

It’s not completely clear to me what your issue is exactly. Is ’the old cached 
version from January’ that you refer to an artifact with a snapshot version or 
a release version? If it is a snapshot version, it depends on the update policy 
whether Maven will use a locally cached snapshot or whether it will try to 
fetch an update from the the configured repository. If there is no explicit 
update policy configured, I believe the default is to look for updates once a 
day. You can force Maven to update snapshots by using the -U (or 
--update-snapshots) flag. If your dependency is a release version, then there 
can be only one artifact for that version and if you have it cached locally, it 
should be identical to that version of the artifact on the repository server.

Maven 4 has not been released yet, are you sure you are (and should be) using 
that version? Version 3.8.6 is the current latest release [0].

To avoid having to manually update dependencies my team has a scheduled task to 
run Renovate [1] in our applications' CI pipelines to check for dependency 
updates. Renovate automatically creates a branch and a merge request whenever a 
dependency update is found. There are more tools like Renovate. For instance 
GitHub also provides Dependabot [2]. Maven Versions Plugin [3] can also be used 
to update dependencies.

Nils.

[0] https://maven.apache.org/download.cgi
[1] https://github.com/renovatebot/renovate
[2] https://docs.github.com/en/code-security/dependabot
[3] https://www.mojohaus.org/versions-maven-plugin/

Op 23 sep. 2022, om 14:58 heeft Bruno <x.ma...@melloni.com> het volgende 
geschreven:

I apologize for the length of this email, I could not think of a shorter way to 
present the issue/questions that is clear enough.

---

My environment involves the usual many open source dependencies (which I 
control by specifying the versions to use in a master POM), but also a large 
number of frequently changing internally built dependencies and a huge number 
of applications that rely on these dependencies.

Changes on these internally built dependencies are carefully controlled so that 
they are always backwards compatible.  In over a decade before we used maven we 
had a single instance of these dependencies and we never - not once - had a 
version conflict problem.

But the default mode for Maven is to update the version number even for a tiny 
change and then to manually update the version of the dependency in every 
single project that depends on it.  Since we have a lot of those, this is a 
horribly error prone process leading to applications that crash because they 
are using the wrong version of a dependency.  As an example... one of our 
crashing applications that was built yesterday was found to contain a 
dependency JAR from January!!! when it should have contained a JAR that was 
also built yesterday.

Things that we tried:

- Builds and executions *INSIDE* of IntelliJ work beautifully. It always finds 
the latest code and it always runs on the local integrated server perfectly. 
_The problem happens in the JARs/WARs of applications placed into the Maven 
local repository_.

- In IntelliJ we tried checking 
Settings/Build,Execution,Deployment/BuildTools/Maven/"Always update snapshots" 
and not change the version number between releases so that it would include a fresh copy 
of the dependency during build, but even *completely wiping out* the local repository 
(the only one in use at this moment) it still used the old cached version from January.

- Next I tried to use the <version>LATEST</version> syntax in the POM.  But 
LATEST was removed after Maven 2 and we are using Maven 4.

- Finally I tried to use <version>[0.0.1, 0.0.999)-SNAPSHOT</version> in the 
hope of simply updating the version number of the dependency during development/tests and 
only updating the formal dependency version to 1.0.0 at release time but Maven rejected the 
syntax.  It is quite possible that the syntax I used is incorrect, but sadly the 
documentation is not very clear and provides no complete examples that I could inspect or 
duplicate.

*QUESTIONS*:

1) Was one of the above methods supposed to work?  If yes, what did I do wrong 
and how do I fix it?

2) If none of the above methods is supported anymore (Maven 4), what method 
should I be using?

3) Is there any other tool - besides Maven - that I should be using for these 
builds.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@maven.apache.org
For additional commands, e-mail: users-h...@maven.apache.org

Reply via email to