Sunday, 2 May 2010

Jigsaw: From Hello World to WorldClock

(last updated 2010-06-20)

Moving on from Hello World to WorldClock, a simple multimodules application.

1. Get the source
Install Subversion:
sudo apt-get install subversion
Create the directories:
mkdir -p ~/dev/worldclock
 Get the source:
cd ~/dev/worldclock
svn checkout https://worldclock-application.dev.java.net/svn/worldclock-application/tags/application6-jigsaw ~/dev/worldclock/application --username guest
When prompted for guest password just press enter, Gnome keyring application then pops up, just cancel and say yes to store the password unencrypted.

2. Move the source files arround
Create the additional directories:
mkdir -p ~/dev/worldclock/application/attic
mkdir -p ~/dev/worldclock/application/build
mkdir -p ~/dev/worldclock/application/resources/lh/worldclock
mkdir -p ~/dev/worldclock/application/src/lh.worldclock.application

mkdir -p ~/dev/worldclock/panel/build
mkdir -p ~/dev/worldclock/panel/resources/lh/worldclock/core
mkdir -p ~/dev/worldclock/panel/src/lh.worldclock.panel/lh/worldclock
(attic is only used to store existing files that won't be needed)

Then move the files:
mv ~/dev/worldclock/application/*.* ~/dev/worldclock/application/attic
mv ~/dev/worldclock/application/src/META-INF ~/dev/worldclock/application/attic

mv ~/dev/worldclock/application/src/lh ~/dev/worldclock/application/src/lh.worldclock.application

mv ~/dev/worldclock/application/src/lh.worldclock.application/lh/worldclock/core ~/dev/worldclock/panel/src/lh.worldclock.panel/lh/worldclock

mv ~/dev/worldclock/application/src/lh.worldclock.application/lh/worldclock/*.properties ~/dev/worldclock/application/resources/lh/worldclock
mv ~/dev/worldclock/application/src/lh.worldclock.application/lh/worldclock/*.png ~/dev/worldclock/application/resources/lh/worldclock

mv ~/dev/worldclock/panel/src/lh.worldclock.panel/lh/worldclock/core/*.jpg ~/dev/worldclock/panel/resources/lh/worldclock/core
The tree should look like this:
So we now have 2 subprojects: application and panel
Each composed of 3 areas: build, src and resources

3. Add the Jigsaw layer
The first part is already there, the first level of subdirectories in the src directories represents the modules roots.

Next add the module-info file for lh.worldclock.panel:
( gedit ~/dev/worldclock/panel/src/lh.worldclock.panel/module-info.java & )
module lh.worldclock.panel @ 0.7
{
  requires jdk.desktop;
}
And the module-info file for lh.worldclock.application:
( gedit ~/dev/worldclock/application/src/lh.worldclock.application/module-info.java & )
module lh.worldclock.application @ 0.7
{
  requires jdk.desktop;
  requires lh.worldclock.panel @ 0.7;
  class lh.worldclock.WorldClock;
}
4. Create the library
$JIG/bin/jmod create -L ~/dev/worldclock/modules
 5. Compile and add to the library
Panel:
cd ~/dev/worldclock/panel

$JIG/bin/javac -encoding UTF-8 -source 7 -d build src/lh.worldclock.panel/module-info.java src/lh.worldclock.panel/lh/worldclock/core/WorldClockBoard.java

$JIG/bin/jmod -L ~/dev/worldclock/modules install ~/dev/worldclock/panel/build -r ~/dev/worldclock/panel/resources lh.worldclock.panel
Application:
cd ~/dev/worldclock/application

$JIG/bin/javac -L ../modules -source 7 -d build src/lh.worldclock.application/module-info.java src/lh.worldclock.application/lh/*/*.java

$JIG/bin/jmod -L ~/dev/worldclock/modules install ~/dev/worldclock/application/build -r ~/dev/worldclock/application/resources lh.worldclock.application
6. Run
$JIG/bin/java -L ~/dev/worldclock/modules -m lh.worldclock.application