2009-05-18 13 views

Respuesta

7

Aquí hay un par de opciones:

  1. utilizar la tarea de hormigas Maven para ejecutar jarsigner del JDK contra todas las dependencias.
  2. Utilice el webstart plugin que puede firmar todos sus JAR, incluso si no lo está utilizando con el fin de JNLP-izing su aplicación. Lo estoy usando para realmente JNLPize una aplicación.
  3. Mire qué hace la fuente del complemento webstart para recorrer todas las dependencias y firmarlas y comenzar un nuevo Maven Plugin/Mojo que haga lo mismo, sin JNLP.
  4. Onejar your app and its dependencies y simplemente firme eso.
1

añadir a plug-in config <archiveDirectory>target</archiveDirectory>

+0

Eso sería un parámetro de plug-in jarsigner (http://maven.apache.org/plugins/maven-jarsigner-plugin/sign-mojo.html#archiveDirectory), pero de destino no es un buen valor. El directorio de destino no corresponde a la raíz del contenedor deseado. – Eero

0

Si está utilizando maven-jar-plugin, puede especificar qué solo frasco para firmar usando el ajuste "jarPath". La siguiente configuración hace que el archivo JAR-con-dependencias que se firmará lugar del archivo jar de dependencia de menos:

<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 desea firmar tanto, no sé cómo hacer eso con maven-jar-plugin , por lo que es posible que deba considerar las otras opciones mencionadas anteriormente.

0

También se puede crear un único JAR utilizando el complemento maven-assembly-plugin.

Junto con la otra sugerencia de Eric Anderson (de firmar otro JAR), se puede firmar este JAR ensamblado (en lugar del JAR original). Tenga en cuenta que el orden de las definiciones de los complementos es importante aquí.

Se supone que sign.keystore.file, etc. están establecidos en otra parte (por ejemplo, en un perfil).

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