After talking this over some more with Brian Fox, I'm convinced that
this approach of segregating plugin and project repositories will
result in a large amount of duplication of effort for ~90% of
projects, since so many project-dependency repositories also host
plugins. This is especially true as the community migrates to a more
general use of proxies. So, this would tend to support my original
changes, where all artifacts are drawn from the <repositories> list,
even for plugin resolution. To keep Maven from resolving snapshot
versions of plugins in this new setup, it would be great if we could
add two new flags to the repository syntax:
- dependencies (true|false)
- plugins (true|false)
These flags would combine with the existing settings for releases and
snapshots, and allow fine-grained control over what a specific
repository is used for. They also line up very nicely with the types
of information typically stored in real repositories, where for
instance you'd probably never see snapshots of project dependencies
living alongside releases of plugins in the same repository...which
would be one case where the new flags would require two separate
repository entries pointing at the same URL.
Again, we can't really put these new flags in place until we have a
means of accommodating new modelVersion numbers in the POM...which
requires a refactoring of the DefaultMavenProjectBuilder at a
minimum. Brett, what do you think about this approach to flagging
repositories instead of putting them in two lists?
-john
On Jan 8, 2008, at 10:21 AM, John Casey wrote:
Well, I thought the discussion was over IRC, but searching the last
year and a half, I'm at a loss.
The original reasoning here was to clean up the usage of
repositories in 2.1, and since there is no end to problems with
pluginRepositories when people actually use them, this seemed like
a good target. We had some discussion about disabling plugin auto-
resolution when the version is missing on the dev list, but we
didn't reach any sort of consensus there, except to say that not
specifying versions is dangerous, I think. It would be good to
drive that discussion to some resolution, and figure out how we can
pin down plugin versions for everything used in a given build (even
in default lifecycle bindings and such) in a scalable and effective
way. However, this will almost certainly require changes to the
project builder, since putting plugin-version information in
released versions of maven itself is very bad, and there is
currently no way to specify plugin versions for the default
lifecycle bindings except through the pluginManagement section of a
parent pom or similar.
In any case, plugin repositories are mixed up with regular
repositories during the plugin resolution process. At one point, I
had written code to resolve only the plugin artifact itself using
only the pluginRepositories list, then take another pass to resolve
the plugin dependencies using the mixture of these two lists.
That's gone now (I'm not entirely sure where it went, or when), and
in any case it wouldn't have produced results that were easy to
debug, I'm guessing. Aligning all artifact resolution to a
consistent set of repositories seemed a good first step down the
path of cleaning all of this up.
However, I'm now starting to wonder whether we want to completely
segregate the build activities - including the artifact
repositories used to drive these activities - from the project
dependencies. To me, it seems a better practice to take a lesson
from plugin-level dependencies, which are kept separate from
regular project dependencies because they are used in the build
process and not at all in project code, and completely separate the
two repository lists. Plugins and their dependencies would only be
resolved from <pluginRepositories>, and project dependencies would
only be resolved from <repositories>. This will prevent any
unintentional injection of snapshots into the mix when resolving
plugin versions (which, again, is a bad feature to be reliant
upon...as evidenced by our repeated failure to control when plugins
are re-resolved...see pluginRegistry and advice on using -U for
plugin resolution for some examples).
So, let's have the discussion now. What does anyone think about
separating the pluginRepositories list completely from the
repositories list, and using them in ways that will not ever
intersect within the maven core? I'm definitely -1 for leaving the
current mixture in the 2.0.x line in place, as I believe this
causes a lot of confusion. IMO, the above separation would be the
most intuitive configuration for a new user, where
pluginRepositories clearly implies its use, and is only confused
when it's (a) not used at all, or (b) mixed with the regular
repositories list.
Comments?
Thanks,
-john
On Jan 8, 2008, at 12:07 AM, Brett Porter wrote:
John,
Won't that break for 2.0.x when running the ITs against them? I
think 110 totally would irrelevant for 2.1, in which case the
version could just be (,2.1-SNAPSHOT) for the test.
But aside from that - why were plugin repositories deprecated? I
don't recall any discussion, proposal or reasoning for it on the
list. I actually use that separation, because of the auto-
resolution of versions for plugins (which was not disabled in 2.1
after much discussion), and the need to add snapshot repositories
for non-plugins only.
Thanks,
Brett
On 08/01/2008, at 4:20 AM, [EMAIL PROTECTED] wrote:
Author: jdcasey
Date: Mon Jan 7 12:20:33 2008
New Revision: 609772
URL: http://svn.apache.org/viewvc?rev=609772&view=rev
Log:
changing it0043 to use the released version of the help plugin
(2.0.2), and changing it0110 to use regular repositories, now
that pluginRepositories are turned off in 2.1-SNAPSHOT (trunk).
Modified:
maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0043/child1/pom.xml
maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0043/child2/pom.xml
maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0110-pluginDependenciesComeFromPluginRepos/
pom.xml
Modified: maven/core-integration-testing/trunk/core-integration-
tests/src/test/resources/it0043/child1/pom.xml
URL: http://svn.apache.org/viewvc/maven/core-integration-testing/
trunk/core-integration-tests/src/test/resources/it0043/child1/
pom.xml?rev=609772&r1=609771&r2=609772&view=diff
====================================================================
==========
--- maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0043/child1/pom.xml (original)
+++ maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0043/child1/pom.xml Mon Jan 7 12:20:33 2008
@@ -25,7 +25,7 @@
<plugin>
<artifactId>maven-help-plugin</artifactId>
<!-- use 2.0.2-snap until it's released, due to bug described
above -->
- <version>2.0.2-SNAPSHOT</version>
+ <version>2.0.2</version>
<executions>
<execution>
<phase>generate-resources</phase>
Modified: maven/core-integration-testing/trunk/core-integration-
tests/src/test/resources/it0043/child2/pom.xml
URL: http://svn.apache.org/viewvc/maven/core-integration-testing/
trunk/core-integration-tests/src/test/resources/it0043/child2/
pom.xml?rev=609772&r1=609771&r2=609772&view=diff
====================================================================
==========
--- maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0043/child2/pom.xml (original)
+++ maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0043/child2/pom.xml Mon Jan 7 12:20:33 2008
@@ -42,7 +42,7 @@
<plugins>
<plugin>
<artifactId>maven-help-plugin</artifactId>
- <version>2.0.2-SNAPSHOT</version> <!-- Removing this will
cause MNG-900 -->
+ <version>2.0.2</version> <!-- Removing this will cause
MNG-900 -->
<executions>
<execution>
<phase>generate-test-resources</phase>
Modified: maven/core-integration-testing/trunk/core-integration-
tests/src/test/resources/it0110-
pluginDependenciesComeFromPluginRepos/pom.xml
URL: http://svn.apache.org/viewvc/maven/core-integration-testing/
trunk/core-integration-tests/src/test/resources/it0110-
pluginDependenciesComeFromPluginRepos/pom.xml?
rev=609772&r1=609771&r2=609772&view=diff
====================================================================
==========
--- maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0110-pluginDependenciesComeFromPluginRepos/
pom.xml (original)
+++ maven/core-integration-testing/trunk/core-integration-tests/
src/test/resources/it0110-pluginDependenciesComeFromPluginRepos/
pom.xml Mon Jan 7 12:20:33 2008
@@ -12,21 +12,22 @@
<issue>MNG-2539</issue>
</properties>
- <!--
<repositories>
<repository>
<id>javamail-local</id>
<url>file://${basedir}/repository</url>
</repository>
</repositories>
- -->
+ <!-- pluginRepositories are deprecated in 2.1-SNAPSHOT
(trunk), use repositories instead. -->
+ <!--
<pluginRepositories>
<pluginRepository>
<id>javamail-local</id>
<url>file://${basedir}/repository</url>
</pluginRepository>
</pluginRepositories>
+ -->
<build>
<plugins>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---
John Casey
Committer and PMC Member, Apache Maven
mail: jdcasey at commonjava dot org
blog: http://www.ejlife.net/blogs/john
rss: http://feeds.feedburner.com/ejlife/john
---
John Casey
Committer and PMC Member, Apache Maven
mail: jdcasey at commonjava dot org
blog: http://www.ejlife.net/blogs/john
rss: http://feeds.feedburner.com/ejlife/john