Hi,

I thought the version is defined in
https://git-wip-us.apache.org/repos/asf?p=maven.git;a=blob;f=maven-core/src/main/resources/META-INF/plexus/default-bindings.xml;h=09ecba441e61d4a997b01af0171815c558548537;hb=maven-3.0.4
(replace hb with the version of your choice :-)).


Hmm, I guess you're thinking of Maven 3.1 or something. In Maven 3.0.4 there does not seem to exist a maven-core/src/main/resources/META-INF/plexus/default-bindings.xml (the fact that your URL does work although the file does not exist in that particular revision is presumably some git peculiarity)
See here:
https://git-wip-us.apache.org/repos/asf?p=maven.git;a=tree;f=maven-core/src/main/resources/META-INF/plexus;hb=maven-3.0.4
(or just click the "plexus" link to go up one level in the git path at the URL you posted) Yet the same things are apparently defined in artifact-handlers.xml for Maven 3.0.4 (so my guess in my previous mail was presumably correct). Anyway, the precise xml file where the default plugin version is defined does not matter that much.

What's interesting to note though, is that more things are going on behind the scenes than just what one sees from the uber-pom. So it's not as simple as I had expected. The default plugin version is defined in one place (somewhere in maven-core, and that place is not the uber-pom). The default Java source and target versions are defined somewhere else entirely, in the implementation of the maven-compiler-plugin. Makes sense, I guess.

actually what is the case is that these parameters have an annotation like

@Parameter(property="maven.compiler.source",defaultValue="1.5")
private String source;

So what happens is that if you don't specify a value in the <configuration>
section then Maven checks to see if the property is defined, if not then it
uses the default value

Once you specify a value in the <configuration> section that is taken as
gold.

So if I get this correctly what happens is:
1. Maven looks if you have a <configuration> section for maven-compiler-plugin in your POM 2. If not then it looks if the property maven.compiler.source is defined somewhere (via POM or -Dmaven.compiler.source or whatever) 3. If that fails, it will take the default property defined in the annotation on the source string in AbstractCompilerMojo.java of the maven-compiler-plugin that you mentioned.

I'm getting there. This level of detail I can live with :-D

the only pity with using properties is that they are not namespaced most of
the time (the maven.compiler.* ones being an exception here), "output" is
claimed at least by three mojos IIRC.

I would think that it's a nice feature to be able to declare arbitrary property name/value pairs in the POM, as they can be used to avoid redundancy in the POMs, for filters etc. But then, they are inherently not namespaced. What's the problem with that? (May again be a total noob question :-)

Btw, tried to have a look at the namespace declaration at http://maven.apache.org/POM/4.0.0- this URL is specified in basically any <project xmlns=...> of any POM I have seen thus far. Turns out that page does not exist. What's up with that?


I would have liked conventions like always "prefix with plugin name".


Agreed, that would be really nice in order to avoid clashes as with for example the "output" property that you mentioned and which is claimed by at least three mojos or so.

Cheers,

Malte



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to