2009-05-18 13 views

risposta

7

Qui ci sono un paio di opzioni:

  1. utilizzare l'attività formica Maven per eseguire jarsigner dal JDK contro tutte le dipendenze.
  2. Utilizzare lo webstart plugin che può firmare tutti i propri JAR, anche se non lo si utilizza allo scopo di JNLP-izzare l'app. Lo sto usando per effettivamente JNLPize un'app.
  3. Guarda cosa sta facendo l'origine del plug-in webstart per iterare su tutte le dipendenze e firmare e avviare un nuovo Maven Plugin/Mojo che fa la stessa cosa, senza JNLP.
  4. Onejar your app and its dependencies e basta firmarlo.
1

metti in plug-in config <archiveDirectory>target</archiveDirectory>

+0

che sarebbe un parametro del plugin jarsigner (http://maven.apache.org/plugins/maven-jarsigner-plugin/sign-mojo.html#archiveDirectory), ma di destinazione non è un buon valore. La directory di destinazione non corrisponde alla radice del jar desiderato. – Eero

0

Se si utilizza maven-jar-plugin, è possibile specificare quali singolo vaso per firmare con l'impostazione "jarPath". La seguente configurazione fa sì che il file jar-con-le dipendenze da firmare invece del file jar di dipendenza-less:

<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> 

Se si desidera firmare sia, non so come fare con maven-jar-plugin , quindi potrebbe essere necessario esaminare le altre opzioni di cui sopra.

0

Si può anche creare un singolo JAR usando il plugin maven-assembly-plugin.

Insieme con l'altro suggerimento di Eric Anderson (di firmare un altro JAR) si può quindi firmare questo JAR assemblato (anziché il JAR originale). Si noti che l'ordine delle definizioni del plugin è importante qui.

Si presume che sign.keystore.file ecc sia impostato altrove (ad esempio in un profilo).

<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> 
Problemi correlati