On 7 Sep 07, at 2:36 AM 7 Sep 07, Milos Kleint wrote:

can I assume this proposal is ok with everyone and start some initial
work on it?


The plan was that we collect all the proposals, and give people until next friday. Then we decide what will be done and in what release.

If you want to start features then do it on a branch because the first couple releases should focus on making sure that regressions are eliminated (alpha-1), and then alpha-2 should focus on usability i.e. making every last possible thing that can go wrong reaches a user in a way that is understandable.

Honestly your changes of adding a feature like toolchains being done prior to some key components being refactored and the plugin api sort I think will be hard.

I am focusing solely on cleaning up code to prepare for people like you being able to add features but if you want to start now and prepare then please do it in a branch and just pull in the changes I'm making from trunk.

We have to focus on compatibility and usability and test that for the first couple releases. The alpha-1 can be cut when the prereqs are done (doxia and maven-artifact) and the regressions are gone. The second release should be the improvements users most need and that's understanding anything problem that occurs. There really also needs to be some refactoring in the core before you could do a serious stab at toolchains.

Milos

On 9/2/07, Milos Kleint <[EMAIL PROTECTED]> wrote:
Hello,

See: http://docs.codehaus.org/display/MAVEN/Toolchains

Text included below for inline comments (which I'll feed back into
the document as needed).

Milos


Goal

Have a way for plugins to discover what JDK (or other tools) are to
be used, without configuring the plugins. The current Maven way of
achieving this is to run Maven itself with the required JDK. After
toolchains, the JDK that Maven is running within, shall be irrelevant
to the project in question.
Motivation

Current way or enforcing project's JDK version (via the enforcer or
otherwise) by forcing the user to run Maven itself with the given JDK
version breaks embedded use.
Additionally toolchains will allow a type of user interaction that IDE
users are used to. Just set the JDK to the project and go.

Design

Note: I'll be focusing on JDK toolchain. I don't have enough
background information for other types of toolchains.
The associated issue is: MNG-468

3 basic points of view:

1. Plugin denotes what toolchain type it requires for it's
operation. So compilation, surefire, jnlp, ... need a JDK toolchain
instance for example. The actual instance of the toolchain is passed
into the plugin by the infrastructure (using Build context?). If no
toolchain of given type is available to the infrastructure, the build
fails. The JDK toolchain shall have a fallback default value of the
JDK maven runs with. Others might not have such a default value.

Q1: how shall the plugin tell what toolchains it needs? parameter?
parameter's or mojo's @toolchain annotation?

2. User defines the toolchain instances that are available in his
current setup. Shall be project independent, stored in
$HOME/.m2/toolchains.xml file?
Could look like this:

<toolchains>
    <toolchain>
        <type>jdk</type>
        <instanceId>jdk15</instanceId>
        <configuration>
<directory>/home/mkleint/javatools/jdk1.5.0_07</ directory>
        </configuration>
    </toolchain>
<toolchains>

3. Project shall be allowed to state which instance of the given
toolchain type it requires for the build. Therefore making sure that
all plugins use jdk15 for example.
if such toolchain instance is not found in user's local setup, the
build shall fail early.

Q2: how to mark that in the pom? Shall also be profile-able, eg. have
different configurations run with different instances of toolchains..

a new pom element?
eg.

<toolchains>
   <toolchain>
      <type>jdk</type>
      <instance>jdk15</instance>
   </toolchain>
</toolchains>

or rather some backward compatible solution? Possibly something along
the lines of the enforcer plugin?
A toolchain-plugin would be responsible for picking the correct
instances and make it available for other plugins to use (in the build
content).

<plugins>
    <plugin>
        <artifactId>maven-toolchain-plugin</artifactId>
        <configuration>
           <toolchains>
              <jdk>jdk15</jdk>
              <j2me>toolkit22</j2me>
           <toolchains>
        </configuration>
    </plugin>
</plugins>

Backward compatibility

Can we achieve backward compatibility with 2.0.x or do we have to go
with 2.1 only? It would be nice if at least plugins that start using
toolchains would not require 2.1.
The only roadblock for backward compatibility is the build-context
that is needed for inter-plugin communication. Build-context seems to
be relatively independent of the rest of maven, just requires plexus
container that is newer than the one used in 2.0.x. Can we upgrade?


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Thanks,

Jason

----------------------------------------------------------
Jason van Zyl
Founder and PMC Chair, Apache Maven
jason at sonatype dot com
----------------------------------------------------------




---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to