Java Anwendungen verpackt als deb-package

21. Mai 2009 von Jan Lolling in Java, Java Code Beispiele

Debian packages sind so ziemlich das eleganteste was es an Verteilungsmechanismen für Software gibt. Diese Art der Softwareverteilung steht auch für Java-Anwendungen zur Verfügung. Idealerweise macht man das innerhalb des build-Prozesses z.B. in Ant.
Hier wird nun kurz ein sehr hilfreicher Ant-Task vorgestellt.
Für eine Desktop-Anwendung unter Linux werden zum einen die eigentlichen Programm-Dateien benötigt als auch eine Datei (.desktop) die das Programm in den Menüs von KDE oder Gnome bekannt macht und zudem den Komfort bietet das Programm auch gleich für die Behandlung von Mimetypes zu registrieren. Es ist also kein Fummeln an irgendeiner Registry erforderlich, diese Zuordnung steht in der desktop-Datei und Gnome/KDE erkennen das automatisch.
Hier der Link zu dem Ant-Task bei Google-Code
Es sind genau genommen 2 Ant-Tasks erforderlich:

  • desktopentry erstellt die .desktop-Datei
  • deb erstellt das Debian-Archiv

Beide sind im Projekt sehr gut dokumentiert.
Hier ein Beispiel-Ant-task:

    <target name="deb" depends="jar" description="build the i386 deb file">
        <delete failonerror="false" >
            <fileset dir="${distrib}">
                <include name="sqlrunner*.deb" />
                <include name="sqlrunner*.desktop" />
            </fileset>
        </delete>
        <taskdef name="desktopentry" classname="com.googlecode.ant_deb_task.DesktopEntry"/>
        <desktopentry
            toFile="${distrib}/sqlrunner.desktop"
            name="SQLRunner"
            comment="Database SQL Client"
            icon="/usr/local/sqlrunner/sqlrunner.png"
            exec="/usr/local/sqlrunner/sqlrunner.sh %f"
            type="Application"
            terminal="false"
            mimeType="text/x-sql"
            path="/usr/local/sqlrunner"
            categories="Development;"
        />
        <taskdef name="deb" classname="com.googlecode.ant_deb_task.Deb"/>
        <deb
            todir="${distrib}"
            package="sqlrunner"
            section="devel"
            architecture="all"
            depends="sun-java5-jre|sun-java6-jre">
            <version upstream="${version}"/>
            <maintainer name="Jan Lolling" email="jan.lolling@mac.com"/>
            <description synopsis="Java based database client">
SQLRunner is a Java programm to handle database with a easy to use SQL interface.
.
The SQLRunner has advanced import and export capabilities. 
.
SQLRunner ships with a large number of JDBC driver (e.g. Oracle, Postgres, DB2, MS-SQL, Informix, Derby, Sybase, MaxDB, MySQL).
.
Download at SourceForge: 
.
http://sourceforge.net/projects/jugbbsqlrunner/
.
Homepage for Java Web Start:
.
http://web.me.com/jan.lolling/SQLRunner/SQLRunner.html
 
            </description>
            <tarfileset dir="${lib}" prefix="usr/local/sqlrunner">
                <include name="hsqldb.jar" />
                <include name="ifxjdbc.jar" />
                <include name="jconn3.jar" />
                <include name="ldapjdbc.jar" />
                <include name="ojdbc14.jar" />
                <include name="sqljdbc.jar" />
                <include name="mssql2000_jdbc.jar" />
                <include name="mysql-connector-java-5.1.5-bin.jar" />
                <include name="postgresql-8.2-506.jdbc2.jar" />
                <include name="sapdbc-7_6_00_30_5567.jar" />
                <include name="looks-2.1.4.jar" />
                <include name="liquidlnf.jar" />
                <include name="log4j-1.2.15.jar" />
                <include name="servlet.jar" />
                <include name="ui.jar" />
                <include name="derby.jar" />
                <include name="db2jcc4.jar" />
                <include name="db2jcc_license_cu.jar" />
                <include name="poi-3.1-FINAL-20080629.jar" />
                <include name="jnlp.jar" />
            </tarfileset>
            <tarfileset file="${distrib}/sqlrunner2.jar" prefix="usr/local/sqlrunner"/>
            <tarfileset file="${src}/sqlrunner.png" prefix="usr/local/sqlrunner"/>
            <tarfileset file="${src}/sqlrunner.sh" prefix="usr/local/sqlrunner" filemode="755"/>
            <tarfileset file="${distrib}/sqlrunner.desktop" prefix="usr/share/applications"/>
        </deb>
    </target>

Hinweise zum desktopentry-Task:
Da man leider nicht direkt die Extention einer Datei referenzieren kann, muss man wenn man sein Programm für einen Dateityp registrieren lassen will erst den passenden mime-type finden. Gnome war so nett in den Dateiattributen z.B. für SQL-Scripte den mime-type text/x-sql zu nennen.
Das Attribute “categories” beschreibt in welchem Menü später der Eintrag auftauchen soll. Es gibt festgelegte Hauptmenüpunkte – diese werden englisch vorgegeben.

Hinweise zum deb-Task:
Bei der Synopsis ist zu beachten, dass der Punkt in eigener Zeile eine Leerzeile provoziert ohne den Punkt selbst darzustellen.
Besonders hervorzuheben ist das depends-Attribute. Hier kann man z.B. vorgeben welche packages zuvor installiert werden müssen (was dann auch automatisch getan wird. Im Fall von Java-Anwendungen sichern wir hier die Existenz der virtuellen Maschiene ab. Das Pipe ist als Oder-Verknüpfung zu verstehen.
Ein deb-Archiv ist im Grunde sehr einfach. Es enthält die Dateien genauso wie sie auf dem Zielsystem auch vorhanden sein sollen. Die tarfilesets enthalten also hier alle notwendigen Dateien (inklusive der zuvor erstellten desktop-Datei). Die Pfadangaben sind allesamt relativ zu / (deshalb fehlt irritierenderweise das /-Symbol -> Kein Fehler !)

  • Kommentare deaktiviert

Comments are closed.