Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Soluzione migliore per risolvere java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

    ciao!

    vi dico migliore perchè in verità un modo l'ho trovato, solo che non lo trovo comodo.
    spero ci sia una solzuine migliore.

    in sostanza, ho aggiunto alcune librerie con maven, e il progetto in intellij funziona.
    ma se lo lancio dopo aver fatto il package mi da l'errrore java.lang.SecurityException: Invalid signature file digest for Manifest main attributes

    se però, prima di lanciarlo, lancio questo comando:
    codice:
    zip -d your_file.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*.DSA'

    allora non ho problemi.
    c'è un modo migliore o più automatico per risolvere questo problema??

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ma se lo lancio dopo aver fatto il package mi da l'errrore java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    Dovresti precisare che tipo di jar viene generato. Nel senso: si tratta forse di un "uber jar"?

    Giusto per chiarire, un uber jar è un jar in cui viene direttamente inserito il contenuto di TUTTI i jar dipendenti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Dovresti precisare che tipo di jar viene generato. Nel senso: si tratta forse di un "uber jar"?

    Giusto per chiarire, un uber jar è un jar in cui viene direttamente inserito il contenuto di TUTTI i jar dipendenti.
    da quello che ho capito intellj lo chiama fat-jar, dovrebbe essere la stessa cosa.

    infatti mi porto dietro solo il jar, senza altri jar per le librerie installate (cosa che ad esempio faccio per un altro programma).

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    da quello che ho capito intellj lo chiama fat-jar, dovrebbe essere la stessa cosa.

    infatti mi porto dietro solo il jar, senza altri jar per le librerie installate (cosa che ad esempio faccio per un altro programma).
    Innanzitutto, dato che parli di Maven, non c'entra (più di tanto) l'IDE. Conta solo Maven, che poi l'IDE lanci dei goal Maven, è comunque un conto.

    Sì è sicuramente un fat jar ma considera che "fat jar" è un termine po' vago/generico, nel senso che può essere considerato il uber jar ma anche altro. Ad esempio Spring Boot crea un "fat" jar ma è ben diverso perché il jar generato contiene altri jar. Siccome questo non può essere gestito nativamente dalla JVM, nei jar fatti per Spring Boot viene usato un class loader custom che "sa" come caricare quei jar incapsulati dentro.

    Dovresti precisare: di cosa si tratta appunto? Spring Boot? Micronaut? Vert-x? Altro?

    Se ad esempio è Vert-x, se hai generato il pom dal start.vertx.io, dovresti trovarti verso il fondo del pom la dichiarazione del maven-shade-plugin

    Questo è il plugin Maven che fa uno "shaded" jar, che è concettualmente un uber jar (non come quello di Spring Boot) con la possibilità di rinominare package e fare altri tipi di "trasformazioni" (es. eliminare risorse o accorpare insieme file di testo/configurazione, ecc...).

    -> https://maven.apache.org/plugins/maven-shade-plugin/
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    ah ok non sapevo.
    grazie per la precisazione!

    si parliao di vertx.
    maven-shade-plugin c'è, il progetto l'ho generato da dove dici tu.

    cmq ti giro direttamente il pom.xml:
    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.zara.api</groupId>
      <artifactId>zara-api</artifactId>
      <version>0.0.7</version>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-shade-plugin.version>3.2.4</maven-shade-plugin.version>
        <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
        <exec-maven-plugin.version>3.0.0</exec-maven-plugin.version>
    
        <vertx.version>4.3.3</vertx.version>
        <junit-jupiter.version>5.7.0</junit-jupiter.version>
    
        <main.verticle>com.zara.api.zara_api.MainVerticle</main.verticle>
        <launcher.class>io.vertx.core.Launcher</launcher.class>
      </properties>
    
      <dependencyManagement>
        <dependencies>
          <dependency>
            <groupId>io.vertx</groupId>
            <artifactId>vertx-stack-depchain</artifactId>
            <version>${vertx.version}</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>
    
      <dependencies>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-web-client</artifactId>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-auth-jwt</artifactId>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-web</artifactId>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-mssql-client</artifactId>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-mail-client</artifactId>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-json-schema</artifactId>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-config</artifactId>
          <version>4.3.3</version>
        </dependency>
        <dependency>
          <groupId>io.vertx</groupId>
          <artifactId>vertx-junit5</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-api</artifactId>
          <version>${junit-jupiter.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.junit.jupiter</groupId>
          <artifactId>junit-jupiter-engine</artifactId>
          <version>${junit-jupiter.version}</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.googlecode.json-simple</groupId>
          <artifactId>json-simple</artifactId>
          <version>1.1.1</version>
        </dependency>
        <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>31.1-jre</version>
        </dependency>
        <dependency>
          <groupId>org.apache.maven</groupId>
          <artifactId>maven-model</artifactId>
          <version>3.8.5</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.13.4</version>
        </dependency>
        <dependency>
          <groupId>com.fasterxml.jackson.datatype</groupId>
          <artifactId>jackson-datatype-jsr310</artifactId>
          <version>2.13.4</version>
        </dependency>
    
        <dependency>
          <groupId>org.bouncycastle</groupId>
          <artifactId>bcpkix-jdk15to18</artifactId>
          <version>1.72</version>
        </dependency>
    
      </dependencies>
    
      <build>
        <plugins>
    
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
              <release>11</release>
            </configuration>
          </plugin>
    
          <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>${maven-shade-plugin.version}</version>
            <executions>
              <execution>
                <phase>package</phase>
                <goals>
                  <goal>shade</goal>
                </goals>
                <configuration>
                  <transformers>
                    <transformer
                      implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                      <manifestEntries>
                        <Main-Class>${launcher.class}</Main-Class>
                        <Main-Verticle>${main.verticle}</Main-Verticle>
                      </manifestEntries>
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                  </transformers>
                  <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar
                  </outputFile>
                </configuration>
              </execution>
            </executions>
          </plugin>
    
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>${maven-surefire-plugin.version}</version>
          </plugin>
    
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${exec-maven-plugin.version}</version>
            <configuration>
              <mainClass>io.vertx.core.Launcher</mainClass>
              <arguments>
                <argument>run</argument>
                <argument>${main.verticle}</argument>
              </arguments>
            </configuration>
          </plugin>
    
        </plugins>
      </build>
    
    </project>

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    si parliao di vertx.
    maven-shade-plugin c'è, il progetto l'ho generato da dove dici tu.
    Ok, se ho capito bene vuoi rimuovere i file sotto META-INF relativi alla signature.
    Quindi puoi utilizzare il DontIncludeResourceTransformer.

    Non ho modo di provare ma dovrebbe bastare aggiungere questo <transformer> (in <transformers>, chiaramente):

    codice:
    <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
        <resource>META-INF/*.SF</resource>
        <resource>META-INF/*.RSA</resource>
        <resource>META-INF/*.DSA</resource>
    </transformer>
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Ho voluto fare una prova reale, perché non ero convinto di quello che avevo scritto. E infatti ... come scritto sopra non funziona.


    Così di per sé funziona:
    codice:
    <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
        <resources>
            <resource>.DSA</resource>
            <resource>.RSA</resource>
            <resource>.SF</resource>
        </resources>
    </transformer>

    Il <transformer> accetta 1 solo <resource> oppure 1 <resources> con dentro dei <resource>.
    E inoltre le risorse NON accettano wildcard o che altro. Ho verificato il sorgente del maven-shade-plugin, il matching avviene con il endsWith() di String. Quindi si può mettere solo una parte fissa "finale". Ovviamente così è limitato.


    In alternativa, si può usare il <filters> (dentro <configuration> ) che è più generale.
    codice:
    <filters>
        <filter>
            <artifact>*:*</artifact>
            <excludes>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
                <exclude>META-INF/*.SF</exclude>
            </excludes>
        </filter>
    </filters>

    Anche questo, provato, funziona.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    ciao!

    grazie ha funzionato!

    ho messo così:
    codice:
      <plugin>
        <artifactId>maven-shade-plugin</artifactId>
        <version>${maven-shade-plugin.version}</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer
                  implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Main-Class>${launcher.class}</Main-Class>
                    <Main-Verticle>${main.verticle}</Main-Verticle>
                  </manifestEntries>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                  <resources>
                    <resource>.DSA</resource>
                    <resource>.RSA</resource>
                    <resource>.SF</resource>
                  </resources>
                </transformer>
              </transformers>
              <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar
              </outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.