Building jEdit from source

February 12, 2012 [Java, Tech]

I have recently agreed to take over development of the JSLint plugin for my favourite editor, jEdit.

To start developing I decided to build jEdit and its plugins from source, which wasn't as easy as I would have expected (thanks to deffbeff for some pointers). A few small changes to the setups for the plugins would make it much easier - at some point I may try to help out there, but for now, here is how I built jEdit and the set of plugins I use regularly:

sudo apt-get install openjdk-6-jdk ant git-core subversion

cd ~/code/public
mkdir jedit
cd jedit

svn co https://jedit.svn.sourceforge.net/svnroot/jedit/jEdit/trunk jEdit

cd jEdit; ant; cd ..

mkdir plugins

Now I made a file inside plugins called build.properties which looked like this:

install.dir       = ../../jEdit/build/settings/jars
jedit.plugins.dir = ../../jEdit/build/settings/jars
jedit.install.dir = ../../jEdit/build
build.support     = ../build-support

And then continued like this:

cd plugins
svn co https://jedit.svn.sourceforge.net/svnroot/jedit/build-support/trunk build-support

svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/ErrorList/trunk ErrorList svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/CommonControls/trunk CommonControls svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/InfoViewer/trunk InfoViewer svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/Console/trunk Console svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/BufferList/trunk BufferList svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/FindFile/trunk FindFile svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/GnuRegexp/trunk GnuRegexp svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/OpenIt/trunk OpenIt svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/RecentBufferSwitcher/trunk RecentBufferSwitcher svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/Sessions/trunk Sessions svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/WhiteSpace/trunk WhiteSpace svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/ScriptEnginePlugin/trunk ScriptEnginePlugin svn co https://jedit.svn.sourceforge.net/svnroot/jedit/plugins/JavascriptScriptEnginePlugin/trunk JavascriptScriptEnginePlugin

git clone git://jedit.git.sourceforge.net/gitroot/jedit/ProjectViewer git clone git://github.com/andybalaam/jslint-plugin-for-jedit.git jslint

cd ErrorList; ant; cd .. cd CommonControls; ant; cd .. cd InfoViewer; ant; cd .. cd ProjectViewer; ant; cd .. cd Console; ant; cd .. cd BufferList; ant; cd .. cd FindFile; ant; cd .. cd GnuRegexp; ant; cd .. cd OpenIt; ant; cd .. cd RecentBufferSwitcher; ant; cd .. cd Sessions; ant; cd .. cd WhiteSpace; ant build; cd .. cd ScriptEnginePlugin; ant; cd .. cd JavascriptScriptEnginePlugin; ant; cd .. cd jslint; ant; cd ..

To find out the dependencies of all plugins and therefore what order to build them, I did this:

find ./ -name "*.props" | xargs grep "depend.*plugin"
Surely something should do this for me automatically?

The problem I haven't solved yet is that the FTP plugin requires JUnit. I could have copied the junit.jar into the jars dir and I think it would have worked, but I want to do it "properly"...

Finally, I made a .desktop shortcut file in ~/.local/share/applications/jedit.desktop like this:

[Desktop Entry]
Name=jEdit
GenericName=Programmer's Text Editor
Comment=Edit text files
Exec=java -jar /home/andy/code/public/jedit/jEdit/build/jedit.jar -settings=/home/andy/code/public/jedit/jEdit/build/settings %U
Icon=/home/andy/code/public/jedit/jEdit/doc/jedit.png
Terminal=false
Type=Application
Categories=Development;TextEditor;
StartupNotify=true
MimeType=text/plain;
StartupWMClass=org-gjt-sp-jedit-jEdit

Which enabled me to run the jEdit I had built from my system menu.

Note that I am running jEdit under OpenJDK because Sun/Oracle Java is annoying to get hold of at the moment, and generally somewhat evil. Thanks Oracle for killing Java. jEdit does not work brilliantly with OpenJDK, which is frustrating. Maybe I'll try to fix it?