2009-05-18 19 views

Répondre

7

Voici quelques options:

  1. Utilisez la tâche Ant Maven pour exécuter jarsigner du contre toutes les JDK dépendances.
  2. Utilisez le webstart plugin qui peut signer tous vos fichiers JAR, même si vous ne l'utilisez pas dans le but de JNLP-izing votre application. Je l'utilise pour réellement JNLPize une application.
  3. Regardez ce que fait la source du plugin webstart pour parcourir toutes les dépendances et signez-les et lancez un nouveau plugin Maven/Mojo qui fait la même chose, sans JNLP.
  4. Onejar your app and its dependencies et signez simplement cela.
1

ajouter à plug-in config <archiveDirectory>target</archiveDirectory>

+0

Ce serait un paramètre plugin jarsigner (http://maven.apache.org/plugins/maven-jarsigner-plugin/sign-mojo.html#archiveDirectory), mais la cible est pas une bonne valeur. Le répertoire cible ne correspond pas à la racine du fichier jar désiré. – Eero

0

Si vous utilisez maven-jar-plugin, vous pouvez spécifier unique pot à signer en utilisant le paramètre "jarPath". La configuration suivante provoque le pot-avec-dépendances fichier à signer à la place du fichier jar-moins de dépendance:

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
     <goals> 
      <goal>sign</goal> 
     </goals> 
     </execution> 
     <execution> 
     <id>make-assembly</id> 
     <phase>package</phase> 
     <goals> 
      <goal>sign</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <!-- NOTE: The secret key is in shared version control. The 
      password is in shared version control. This IS NOT 
      SECURE. It's intended to help avoid accidentally 
      loading the wrong class, nothing more. --> 
     <jarPath>${project.build.directory}/${project.build.FinalName}-${project.packaging}-with-dependencies.${project.packaging}</jarPath> 
     <keystore>${basedir}/keystore</keystore> 
     <alias>SharedSecret</alias> 
     <storepass>FOO</storepass> 
    </configuration> 
    </plugin> 

Si vous voulez signer les deux, je ne sais pas comment faire avec maven-jar-plugin , donc vous devrez peut-être regarder dans les autres options mentionnées ci-dessus.

0

On peut également créer un fichier JAR unique en utilisant le plugin maven-assembly. Avec l'autre suggestion d'Eric Anderson (de signer un autre JAR), on peut alors signer ce JAR assemblé (au lieu du JAR d'origine). Notez que l'ordre des définitions de plugin est important ici.

On suppose que sign.keystore.file etc. est défini ailleurs (par exemple dans un profil).

<build> 
    <plugins> 
     <!-- It seems that maven-assembly-plugin must be declared before the maven-jar-plugin, 
      so that it is executed first in the package phase, 
      and then the signing of the packaged jar can succeed. --> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.4</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifestEntries> 
         <!-- ... --> 
        </manifestEntries> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>jar</goal> 
        </goals> 
       </execution> 
       <execution> 
        <id>make-assembly</id> 
        <phase>package</phase> 
        <goals> 
         <goal>sign</goal> 
        </goals> 
        <configuration> 
         <jarPath>${project.build.directory}/${project.build.FinalName}-${project.packaging}-with-dependencies.${project.packaging}</jarPath> 
         <keystore>${sign.keystore.file}</keystore> 
         <type>${sign.keystore.type}</type> 
         <storepass>${sign.keystore.storepass}</storepass> 
         <alias>${sign.keystore.alias}</alias> 
         <verify>true</verify> 
         <verbose>false</verbose> 
         <removeExistingSignatures>true</removeExistingSignatures> 
        </configuration> 
       </execution> 
      </executions> 
      <configuration> 
       <archive> 
        <manifest> 
         <!-- <addClasspath>true</addClasspath> --> 
        </manifest> 
        <manifestEntries> 
         <!-- ... --> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build>