Daniel Fagerstrom wrote:
Reinhard Poetz skrev:
After working on the deployer and learning more about the Maven2
internals, I want to share 2 thougths:
I've already raised the question whether it is possible to merge
block.xml and pom.xml. For now it's not as dependencies in pom.xml
can't carry all the necessary information for us. Maven 1.1 models had
support for properties elements, but they have been dropped in Maven
2.0 (Does anybody know the reason for it?).
There is a configuration element within the plugin element where you can
put any xml, the OSGi M2 plugin of Felix uses that, see
http://docs.safehaus.org/display/OSGI/OSGi+Plugin+for+Maven+2.0.
yes I know this but it doesn't really help as the information gets scattered
over different places which isn't really better than having two files ...
I also mentioned my concerns about tieing us to closely to Maven.
I can agree about that, but I don't think it is the right time to care
about that right now. Even if we happen to have well designed formats
with schemes for wiring and block descriptions, they are basically
armchair speculations. We haven't exactly checked them with a lot of
detailed use cases, not talking about used them in practice.
So although they seem to be good designs, we don't know, experience will
tell. So I think worrying about the final format is premature. Lets get
something that work that we can start experimenting with.
ok
I think the solution for this is very simple: Our contract is block.xml.
As soon as a Maven pom.xml can give us all the required information
and people use it as build descriptor, block.xml can be
*automatically* generated for them during the build lifecycle and they
don't have to care for it anymore.
I'm not such a large fan of automatically generated configuration file.
If you need to generate it, it means that the basic desigend sucked.
Also it means that you are going to get error messages from a file that
you don't recognize whan you deply the block, and that is not user
friendly.
People that don't want to use Maven, have to provide a hand-crafted
block.xml.
IMO that is FS, we should start by making it work before we start to
generalize the stuff. I'm all for making parts of Cocoon more reusable.
But I don't think we should achieve that by supporting all kinds of uses
at each abstraction level. IMO for the block and deployment level we
support M2, period.
If there comes something much greater than M2 the next year or so it
will do things conceptually different from M2, so trying to adapt to
that will just complicate things.
Going this way we are not blocked by getting the missing Maven
features and blocks don't get tied to Maven which would make a future
replacement of Maven very difficult.
As said above, we shouldn't worry to much about future replacements of
M2. If it happen, we solve it then.
Ok, I will come up with a first version of the deployer and than we continue our
discussions based on code.
A second thought: As outlined in one of my previous mails, a Cocoon
block will become a valid jar file, for example with following content:
ROOT
+-- block.xml
+-- pom.xml
+-- sitemap.xmap
+-- org
| +--myProject
| +-- MyJavaflowController.class
+-- app
+-- formTemplate.jx
+-- image.gif
+-- formDefinition.xml
At deployment this file is extracted into e.g.
/WEB-INF/blocks/0000001. I wonder if this can cause problems as a lot
of resources become part of the classpath but only
MyJavaflowController.class should be.
As long as the non class resource are put into easy recognizable file
and directories, it should be easy to filter them in our block class
loader, for non block uses people are probably only using the Java
classes and the facts that there are resources with the same name in
different jars shouldn't matter.
ok, wasn't sure about this.
If it is a problem we could provide two artifacts, one JAR file
containing the classes and one that contains the resources which is
extracted into /WEB-INF/blocks/0000001 but not added to the classpath.
... but this makes the build and the deployment more complicated for
our users ...
No, one jar per block is a must from usablity POV. Then in practice it
is probable that most blocks will be class only or resource only, but
that is a different matter.
More details about Jorg's and my findings in a separate mail.
Thanks!
--
Reinhard Pötz Independent Consultant, Trainer & (IT)-Coach
{Software Engineering, Open Source, Web Applications, Apache Cocoon}
web(log): http://www.poetz.cc
--------------------------------------------------------------------