¿Cómo firmo una docena de archivos JAR con jarsigner?

Quiero firmar dos docenas de archivos jar usando jarsigner, dando la contraseña solo una vez.

No es posible dar múltiples archivos a jarsigner, de acuerdo con la página de manual y usar un bucle for en la línea de comando todavía me obliga a ingresar la contraseña para cada archivo.

Preferiría una solución para la línea de comando, pero estaría bien con la solución ant / maven.
El sistema es Linux.

¿Cómo firmo una docena de archivos jar, dando la contraseña solo una vez?

Respuesta 1

Aquí hay un fragmento del archivo de compilación Ant para PSCode: firma una gran cantidad de jarras. El truco está en el foreachelemento.

<target name="createjars"
  depends="compile"
  description="Jars the compiled classes">
    <mkdir dir="${build}/jar/" />

    <foreach target="jar.package" param="package" inheritall="true">
        <path>
            <dirset dir="${src}/java/org/pscode" includes="**/*" />
        </path>
    </foreach>
</target>

..y..

<target name='jar.package'>
    <script language='javascript'>
        <![CDATA[
            prop = pscode.getProperty('package');
            index1 = prop.lastIndexOf('pscode') + 7;
            index2 = prop.length();
            prop1 = prop;
            path = prop1.substring( index1, index2 );
            path2 = path.replaceAll('\\\\','/');
            pscode.setProperty('path', path2 );

            name = path2.replaceAll('/','.');
            pscode.setProperty('jar.name', name + '.jar' );
        ]]>
    </script>

    <xmlproperty file="${src}/java/org/pscode/${path}/manifest.xml" />
    <!-- echo message='jar.name: ${jar.name} *** ${application.title}' / -->
    <if>
        <not>
            <uptodate targetfile='${build}/dist/lib/${jar.name}' >
                <srcfiles dir= '${build}/share/org/pscode/${path}' includes='*.class'/>
            </uptodate>
        </not>
        <then>
            <jar
                destfile='${build}/dist/lib/${jar.name}'
                index='true'
                update='true'>
                <manifest>
                        <attribute name="Implementation-Title" value="${application.title}" />
                        <attribute name="Implementation-Vendor" value="${vendor}" />
                        <attribute name="Implementation-Vendor-Id" value="org.pscode" />
                        <attribute name='Implementation-Version' value='${now}' />
                </manifest>
                <fileset dir='${build}/share'>
                    <include name='org/pscode/${path}/*.class' />
                </fileset>
                <fileset dir='${src}/java'>
                    <include name='org/pscode/${path}/*.png' />
                    <include name='org/pscode/${path}/*.jpg' />
                    <include name='org/pscode/${path}/*.gif' />
                    <include name='org/pscode/${path}/*.xml' />
                    <include name='org/pscode/${path}/*.html' />
                    <include name='org/pscode/${path}/*.ser' />
                </fileset>
            </jar>
        </then>
    </if>

    <!-- If the Jar is updated, any previous signatures will be invalid, it
    needs to be signed again. We cannot use the issigned condition since
    that merely checks if a Jar is signed, not if the digital signatures are
    valid. -->
    <exec
        executable='${jar.signer}'
        resultproperty='jar.signer.result.property'
        outputproperty='jar.signer.output.property'>
        <arg value='-verify' />
        <arg value='${build}/dist/lib/${jar.name}' />
    </exec>

    <if>
        <or>
            <not>
                <equals arg1='${jar.signer.result.property}' arg2='0' />
            </not>
            <or>
                <contains
                    string='${jar.signer.output.property}'
                    substring='unsigned'
                    casesensitive='false' />
                <or>
                    <contains
                        string='${jar.signer.output.property}'
                        substring='SecurityException'
                        casesensitive='false' />
                </or>
            </or>
        </or>
        <then>
            <signjar
                jar='${build}/dist/lib/${jar.name}'
                alias='pscode'
                storepass='${sign.password}'
                force='true'
                verbose='${verbose}'
                keystore='${user.home}/${sign.pathfilename}' />
        </then>
    </if>

</target>
Respuesta: 2

pruebe {MyClass [] myClass = cProxy.getMyClass (); return "" + myClass [0]; } catch (Excepción e) {// nada que hacer} return "" + MyClass.UNKNOWN; <- NoClassDefFoundError arrojado Obtuve MyClass ...

Un problema al que me enfrento con la etiqueta del selector de fecha y hora de struts2.0.14 El problema es que el atributo de formato de fecha y hora de struts2 datetimepicker siempre debe establecerse en el formato del formato de fecha y hora del servidor Tomcat, de lo contrario ...

como titulado. Tengo uso sincronizado para proteger la escritura de subprocesos múltiples. pero quiero saber si necesito agregar volátil para proteger la lectura. (como sabemos, también puedo usar sincronizado para proteger la lectura, pero evitará la lectura ...

Estoy usando una biblioteca de terceros en mi aplicación web en tomcat. El problema es que una clase de esa biblioteca de terceros requiere inicialización con un archivo XML LibraryClass lb = new LibraryClass ("archivo ...