"John Allen" <[EMAIL PROTECTED]> writes: > database accessible via Wagon. Someone mentioned something about using RDP > about 6 months ago... >
Hello, I was the one who talked about this 6 months ago :-) I am still interested in it, and willing to share my ideas and part of my workforce. One reason I did not produced anything interesting was the lack of answers to some questions I asked about basic maven architecture and usage of some of its components. I then switched to other things, and then 6 months were gone. Just in case, here is my original mail (august the 16th): Hello, Following some quick discussion with Vincent MAssol at maven day paris in july about a generalised QA tool for maven, I would like to share some thoughts about report management in maven and how it could (maybe) be improved. Currently, report generation in maven2 is largely *ad hoc*: each plugin (reporting or build plugin) has its own private way of generating data and generating *views* on this data to be integrated into the project's site. For example, *surefire* plugin generates XML reports into the =target/surefire-reports/= directory and these reports are later processed by *surefire-report* reporting plugin to generate HTML pages into the =target/site/surefire-reports/= directory. These HTML pages are decorated as other pages in the site thus providing a consistent look and feel across reports (and by the way allowing easy customization of this L&F through CSS files and custom templates). This is the case for most reports I have used like *pmd*, *cobertura* or *checkstyle*. Other reports like *javadoc* and *xref* reports generates HTML pages with their own private format. As it may be apparent from the questions in the maven users' mailing list, the aggregation of reports for modules of a project is a recurring issue. This aggregation must currently be implemented by each plugin in an *ad hoc* way and it seems this is not a trivial task. Moreover, the aggregation process may not be easily controlled in a consistent way: excluding certain projects or part thereof from aggregation is difficult (or impossible ?). Furthermore, there is a need for a global and synthetic view of complex multi modules projects' status and QA information. This information was provided in **maven 1.X** through the *dashboard* plugin that could aggregate reports' output in one tabular view. I think that both issues could benefit from changing the current approach of report and (meta-)information handling in maven from a plugin dependent view to a project dependent view. A project's structure has (at least) two dimensions: A *physical structure* that is made of files, directories, archives, maybe URLs ; and a *logical structure* made of modules, packages, classes, methods, instructions. These two dimensions are obviously related: a class is *defined* in a file, a package is *implemented* by one or several directories, a method is *defined* in a class, etc. Each reporting plugin provides some pieces of information about part of the stuctural elements of a project: - Surefire reports give sucess rates and failures explanation for test cases which are themselves testing methods, classes or modules, - javadoc report document logical structural elements of a project, - coverage reports give coverage information about instructions or lines in files, in relation with test cases. This latter example further illustrates that information can be added to information. The basic idea I have in mind is thus to provide as a core maven service a central information API that would be used by **all** reporting plugins to attach information to structural elements of the project. This information could be store as a RDF (see also http://www.ilrt.bris.ac.uk/discovery/rdf/resources/) graph backed by a suitable ontology and extensible at will. The RDF structure would simplify most of the issues raised earlier in this text as it gives standard tools to query, aggregate and transform informations stored in the graph. Aggregating information, for example, is trivial and can be done generically at *any* suitable level: If I need coverage percent for each method, I can query nodes relating to methods for a =test-coverage= predicate attached to this node and use the given object's value. Or I can use the same information by aggregating values at, for example, module scope, following links from module nodes to =test-coverage= predicates they lead to. Another interesting aspect of this scheme is that RDF, having an external XML representation, is amenable to XSLT transformation and thus can be used uniformly to generate human-readable reports without resorting to specialized handling per plugin. Furthermore, storing this information in a versionned database would allow one to retrieve the *evolution* of the information attached to a project over time and various builds. This functionality is today provided by qalab plugin, once again in an *ad hoc* way. I dont know exactly what development effort this would imply: 1. creating the primary structure from the project at startup 2. populating the RDF database from this primary information gathered along the way 3. giving access to this database through an API to all plugins 4. providing a transformation framework for easy report generation from the database and rendering I think that 2 and 3 above are the same thing: the primary and secondary information could all be created by the various plugins involved in a build, with some bootstrapping in 1 to create the basic structure (projects, modules, base directories...). Comments are of course welcomed and sought after. As I said, I am still interested. Regards, -- OQube < software engineering \ génie logiciel > Arnaud Bailly, PhD \tel> (33) 3 59 08 61 98 \mob> (33) 6 17 12 19 78 \web> http://www.oqube.com RCS Lille B 490 219 730 --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]