Hi,

> I'm not a Maven expert, so please provide your feedback about those ideas.

I am picking up some sections from 
http://languagetool.wikidot.com/switching-to-maven:

> To build all of LT in one go, we should have one "LanguageTool" Maven module 
> that includes all the other LT modules and which itself has no code (a 
> so-called multimodule project).

That is a good approach. Do not get confused by the fact that Maven modules are 
sub-directories of such a multi-module project while in Eclipse, there is no 
such thing as a project in a sub-directory. The Maven m2e plugin handles that 
nicely. If you try to mimick the Eclipse way by putting the multimodule project 
as a directory parallel to the modules, you'll run into all kinds of problems 
with various Maven plugins including the release plugin (see below). Use a 
hierarchical arrangement like:

- trunk
  - pom.xml 
  - languagetool-core
    - pom.xml
    - ...
  - languagetool-en
    - pom.xml
    - ...
  - ...

In Eclipse, you'll get one project for the top-level project and one for each 
module and all will appear at the same level in the project explorer. IntelliJ 
supports hierarchical structures in its project explorer. I don't know about 
NetBeans or other IDEs.

> As the Maven language modules (languagetool-en) depend on languagetool-core, 
> but languagetool-core needs to initialize the language-specific classes, this 
> needs to happen at runtime to avoid a circular dependency. Thus 
> languagetool-core needs to scan, at runtime, the classpath for classes in 
> org.languagetool.language which extend the Language class.

Instead of scanning for subclasses, I'd suggest to define some location in 
META-INF where language modules can declare themselves. E.g. a file 
META-INF/org/languagetool/language-module.properties with a key/value like 
"languageClass=org.languagetool.language.en.English". 

> The build process now also builds artifacts for Maven central which have to 
> be uploaded. This means more work for the developer doing the release. (It 
> doesn't have to happen at the same time as the end-user release, although 
> that would be nice)

A release of a multi-module Maven project can be very simple, just run a "mvn 
release:prepare; mvn release:perform" on the top-level project. You should 
consider though, if you want all modules to have one version or if every module 
should be versioned separately. If you use one version for all, the release is 
simple and users always know which modules are supposed to work with each other 
- however - you may at times release a new version of modules that didn't 
actually change since the last release. Some people therefore prefer to version 
everything separately. I'd suggest you start with on version for all until you 
got used to Maven and may later consider switching to a per-module versioning 
scheme.

To get an idea about the steps involved in releasing a multi-module project 
with a single-version scheme to Maven Central with the Maven release plugin, 
check out this 

        http://code.google.com/p/uimafit/wiki/CreatingARelease

As long as you stick to the single-version scheme, the effort is the same, no 
matter how many modules you have.

> Should we use less modules, i.e. put languagetool-standalone, 
> languagetool-office-extension, languagetool-gui-core into one module? This 
> would then be one module which produces several artifacts (advice against 
> this).

Do not worry about having many modules. It is definitely worth it. You can do a 
fine-grained dependency management and possible fine-grained versioning if you 
want that at some point.

> How to build the JNLP stuff (webstart) with Maven?

I never used it, but here's a plugin that seems to be actively maintained (last 
update 2012-02-06): http://mojo.codehaus.org/webstart/webstart-maven-plugin/

> How to build the OXT with Maven?

If you have an ant-based solution for that, you might just use that using the 
Maven ant-run plugin. Otherwise, it may possibly be configure the Maven 
assembly plugin to do what you need. I don't know anything about OXT, I'm 
afraid. There seems to have been some activity towards an OXT Maven Plugin, but 
it seems to be dead: https://github.com/oboehm/maven-ooo-plugin-it/

Cheers,

-- Richard
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://ad.doubleclick.net/clk;258768047;13503038;j?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
Languagetool-devel mailing list
Languagetool-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/languagetool-devel

Reply via email to