Generating Avalon meta information using apt

"Raffael Herzog" <[email protected]>
Newsgroups gmane.comp.jakarta.avalon.user
Organization Codeshack AG
Message-ID <[email protected]>
Hi,

I already posted to this list about issues with Java 5.0 and the  
avalon-meta Maven plugin.

I was thinking a bit about that and came to the conclusion, that making a  
new system which uses apt (Annotation Processing Tool) would actually be a  
very nice thing -- I'd also have the time to realise it. I see two major  
advantages in doing this:

1. This tool is part of Java since version 5.0 and provides a rather easy  
to use API for processing annotations and generating whatever out of the  
information in there. Because it's part of Java 5.0, it will probably  
continue working even if the Syntax is changed again, without having to  
adapt the code.

2. Annotations use Java expressions, which allows the IDE to help the  
programmer. E.g., instead of writing:

/**
  * @avalon.dependency type="my.package.MyService"
  */

you would write

import my.package.MyService;
...
@Dependency(type = MyService.class)

This makes the declaration of dependencies and other things less error  
prone as both the IDE and the compiler will check these declarations for  
correctness to a certain extent. It also allows developres to use  
constants and other language features in meta info declarations, e.g.:

@Component(name="my-component", lifestyle=Lifestyle.SINGLETON)
...

or

public static final String CTX_PREFIX = "urn:avalon:my.package.";
...
@Entry(name = CTX_PREFIX+"someValue")
...


So, what would it take to realise that? Actually, that wouldn't be too  
much work, I think. First of all, a set of AnnotationProcessors for these  
annotations would be needed to generate the meta files. I've seen that the  
code is very abstract and most of the work is already done and easily  
reusable. The current avalon-meta plugin and a new annotation based system  
could coexist peacefully.

The second part is a bit harder: Neither Ant nor Maven support apt yet,  
AFAIK. The easiest way to change this would probably be to make a new  
compiler plug-in, because apt can be used as full replacement of javac, it  
just needs/supports a few more options, the most important of which is -s  
<dir> (where to place generated files). Apart from that, the usage is just  
the same as for javac. If apt can be integrated with Ant and Maven (and  
I'm sure it will, it's only a question of time :), this would actually  
eliminate the need of a separate avalon-meta plugin: Just include  
avalon-meta-tools.jar into the classpath and the annotations would be  
processed.

Well, I'll have to talk to the developers of Ant and Maven about this. But  
I'd first like to read your general opinion, comments, thoughts,  
proposals. I also would first make a detailed proposal of the exact  
annotation definitions and post it to the developer's list for discussion.

cu,
    Raffi

-- 
raffael herzog
software engineer

codeshack ag
smart software solutions

hardstrasse 219, postfach
8037 zurich - switzerland

tel: +41 43 444 65 65
fax: +41 43 444 65 66

[email protected]
www.codeshack.ch
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.