Ben,

> So to Colin (I think)

I'm not Colin, but I will try to explain the situation I'm in.

> Why do you have multiple source trees?
> What is in them?

1) src/java: production source code
2) src/junit: unit test code: component white box tests
3) src/integration: integration unit test code: component black box tests
3) src/mocks: mock objects 
4) src/functional: test code used by our own functional test system 

> Do they build distinct artifacts?

Yes! src/java is the input to my production jar, while src/mocks is the
input to a jar containing the mocks that can be used by the unit tests of
this component and by the integration unit tests of higher level components
as the stub for this component.

I could however split the interfaces from the production implementation as
two Maven projects and add a third for the mocks. Do I want to do this? NO,
since these interfaces, implemenation and test code is what makes up my
component! I still have one production deliverable, but I also want to
deliver a test artifact that can be used as a stub for this component by
other components. When the production code changes, the tests as well as the
mocks have to be kept in sync by the developer who changes something. If I
had to split all the code, people would definitely forget about some of
these parts.

I agree with Jason van Zyl to have only one source folder to define the
*production* code! But I would like to rephrase it as "The java plugin will
only accept 1 input source folder, always!". If you don't change the
statement, it's confusing for people since they see references to unit &
integration unit tests in the POM. Do these references belong there? In my
opinion, they do. I think of the POM as the container keeping all the
configuration details for plugins of Maven I use to process my project.

I would like to state that it's up to the plugin writer to define what it
needs as input and what as output. Look at the following example:

java plugin: 
- input: sourceDirectory
- output: hardcoded to targets\classes?

aspectj plugin: 
- input: aspectSourceDirectory
- input: srcDirectory (re-use the tag of the java plugin here?)
- output: generated sources with aspects woven into it. (re-use the
sourceDirectory value of the Java-plugin here?)

It's been a while since I used AspectJ, but if I remember well, you write
your source code, you write your aspects and then weave all together.
Doesn't this mean that that the AspectJ plugin needs two inputs? I need two
source folders, no?

If you standardize this, then the documentation for each plugin would not
only list the goals and properties, but also a description of what you
should write in the POM to configure the plugin. The documentation of the
aspectj:compile goal is a good example of this: it defines an additional
source folder within the build tag!

Maven has been very valuable so far, but this source folder thing must be
resolved before a 1.0 release in my opinion. It's not a black or white
thing, we have to cover the gray area and cover it consistently!

Ringo

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

Reply via email to