epubcheck innerhalb eines Maven-Prozesses

Digitale Bücher verifizieren: epubcheck mit Maven

Anläßlich der Version 1.1 von epubcheck, dem derzeit vorherrschenden Prüfprogramm für digitale Bücher im EPUB-Format, wollte ich die Anwendung in einen Maven-Prozess zur Herstellung eines Dokuments einbauen. Ich dachte so bei mir, dass sollte einfacher sein, als jedes Mal epubcheck zu installieren und die Prüfung manuell aufzurufen. Da epubcheck nur zwei Abhängigkeiten hat, sollte die Integration auch nicht allzu schwierig sein. Leider erwies sich das Vorhaben als nicht ganz so einfach.

Epubcheck ist derzeit nicht in einem öffentlichen Maven-Repositorium vorhanden, man kann es also nicht einfach über diese laden. Wie immer in diesen Fällen besteht natürlich die Möglichkeit, die betreffenden JAR-Dateien einfach in das eigene Projekt-Repositorium zu laden. Dann wären sie wenigstens projekt- oder organisationsweit verfügbar. Leider, leider ging das bei epubcheck nicht. Das ZIP-Archiv enthält eine modifizierte Saxon-Version und epubcheck.jar mag auch sonst nicht mit Maven-Dependencies zusammenarbeiten. Es besteht vielmehr darauf, seine Abhängigkeiten aus dem lib-Verzeichnis zu laden, das in der ZIP-Datei mitgeliefert wird.

Maven bietet über das Exec Plugin die Möglichkeit, beliebige externe Anwendungen innerhalb eines Arbeitsablaufs aufzurufen. Damit ließ sich epubcheck erfolgreich aufrufen. Es blieb die Frage der Installation. Der Punkt bei Maven-Prozessen ist ja gerade, dass die benötigten Komponenten und Ressourcen automatisch nachgeladen werden, sie nicht vorher manuell auf dem jeweiligen Rechner installiert werden müssen.

epubcheck ZIP-Datei im eigenen Repositorium
epubcheck ZIP-Datei im eigenen Repositorium

Meine Lösung besteht darin, die ganze ZIP-Datei, die man von der Download-Seite des epubcheck-Projekts herunterladen kann, in das eigene Repositorium einzulagern. Maven-Repositiorien sind ist zwar hauptsächlich für ausführbare Komponenten gedacht, aber man kann eben auch benötigte Ressourcen dort einlagern. Man muss sie nur entsprechend kennzeichnen, damit sie nicht mit JARs verwechselt werden.

Der Arbeitsablauf zu Verifikation einer EPUB-Datei besteht daher aus zwei Schritten:

  1. Dem Herunterladen und Auspacken des epubcheck-Archivs
  2. Dem Ausführen von epubcheck als externe Anwendung

Punkt 1 lässt sich mit dem Depenency-Plugin lösen. Das eingelagerte ZIP-Archiv wird aus dem Repositorium auf die Platte des jeweiligen Rechners kopiert und dort in einem Verzeichnis entpackt:

<groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
         <id>unpack epubcheck</id>
         <phase>verify</phase>
         <goals>
            <goal>unpack</goal>
         </goals>
         <configuration>
           <artifactItems>
              <artifactItem>
                 <groupId>com.google.code</groupId>
                  <artifactId>epubcheck</artifactId>
                  <version>1.1</version>
                  <type>zip</type>
                  <overWrite>false</overWrite>
                  <outputDirectory>${project.build.directory}/epubcheck</outputDirectory>

Sobald die epubcheck-Anwendung im Verzeichnis vorhanden ist, kann sie ganz normal aufgerufen werden, etwa so:

<groupId>org.codehaus.mojo</groupId>
   <artifactId>exec-maven-plugin</artifactId>
   <version>1.2</version>
   <executions>
      <execution>
        <id>check epub</id>
        <phase>verify</phase>
        <goals>
             <goal>exec</goal>
        </goals>
      </execution>
   </executions>
   <configuration>
	  <executable>java</executable>
	  <arguments>	  
	    <argument>-jar</argument>
	    <argument>${project.build.directory}/epubcheck/epubcheck-1.1.jar</argument>
            <argument>${project.build.directory}/epub/mein-erster-roman.epub</argument>

Die vollständige POM-Datei habe ich zur Illustration angehängt.

Wie man an den Beispielen sehen kann, habe ich die EPUB-Prüfung in die Verify-Phase des Maven-Zyklus gelegt. Das ist die letzte Phase vor der abschließenden Bereitstellung der Produkte. Möglich wäre es natürlich auch, die Schritte in die Test-Phase, direkt nach der Erstellung der EPUB-Dateien, zu verlegen. Das hängt vom Szenario ab.