Bir .jar çalıştırmaya çalışırken “Geçersiz imza dosyası”


450

Java programım bir kavanoz dosyasında paketlenmiştir ve harici bir kavanoz kütüphanesi, yaşam dolu kale kullanır . Kodum iyi derler, ancak kavanoz çalıştırmak aşağıdaki hataya yol açar:

"Main" iş parçacığında özel durum java.lang.SecurityException: Bildirim ana öznitelikleri için geçersiz imza dosyası özeti

Bir açıklama arıyor bir saatten fazla googled ve çok az değer buldum. Birisi bu hatayı daha önce görmüşse ve yardım sunabilirse, yükümlü olurum.


1
kendi kavanozunu imzalamaya mı çalışıyorsun? öyleyse, nasıl imzalamaya çalışıyorsunuz?
Cogsy

Hayır, en azından benim olduğumu düşünmüyorum. Xcode kendi başına imzalamaya çalışıyor olabilir, ancak bunu kapatmak için herhangi bir ayar görünmüyor.

Uygulanan arayüzleri içeren kavanozların da imzalanıp imzalanmadığını kontrol etmeyi unutmayın!
gaurav

Yanıtlar:


47

Burada listelenen çözüm bir işaretçi sağlayabilir.

Manifest ana özellikleri için geçersiz imza dosyası özeti

Sonuç olarak :

Resmi kavanozu olduğu gibi tutmak ve sadece uygulama jar dosyanızın manifest dosyasına bağımlılık olarak eklemek en iyisidir.


3
Bunu manifest dosyasına nasıl yansıtırım? Daha önce hiç düzenlemedim. Xcode kullanıyorum ve ortak kural, yaptığım şey dahil etmek için myproject / lib dizinine harici kavanoz kitaplıkları koymaktır.

@ user123003 .. Intelli-J'de olduğu gibi
MikeM

13
Ne yazık ki bazılarımız "maven gölge eklentisi" gibi şeyleri kullanıyoruz, bu yüzden orijinal kavanozun kelimesi kelimesine kopyaları da dahil olmak üzere bu durumlarda kolay değil ...
rogerdpack

bu sitede cevaplamak için utanmaz fiş : stackoverflow.com/a/30922181/448779
foo

maven-assembly-plugin ne olacak? Benim durumumda bu sorunu çözdü
jhenya-d 22:30 '

1083

Bir uber-jar oluşturmaya çalışırken bu hatayı alan kullanıcılar maven-shade-pluginiçin çözüm, eklenti yapılandırmasına aşağıdaki satırları ekleyerek manifest imza dosyalarını hariç tutmaktır:

<configuration>
    <filters>
        <filter>
            <artifact>*:*</artifact>
            <excludes>
                <exclude>META-INF/*.SF</exclude>
                <exclude>META-INF/*.DSA</exclude>
                <exclude>META-INF/*.RSA</exclude>
            </excludes>
        </filter>
    </filters>
    <!-- Additional configuration. -->
</configuration>

9
Bu yöntemi uber-jar'um için kullandım ve harika çalıştı. Maven.apache.org/plugins/maven-shade-plugin/examples/… ' da tam bir POM örneği vardır; bu, dahil edilen dosyaları filtreleyen bu yöntemi gösterir.
M. Dudley

4
Ben yepyeni bir iş parçacığı başlatmak için cazip - ama bu Googles sonuçlarında 1 numara olduğundan - burada tutmak için uygun görünüyordu. Burada listelenen satırları kullanıyorum POM dosyasında - ve hala uygulamayı çalıştırırken güvenlik hatası alıyorum. Beklendiği gibi iyi bir yapı oluşturur ve tabii ki bir Uber kavanozu YAPMADIĞINDA iyi çalışır. Ve bu kesinlikle bir seçenek olsa da - onları ayrı tutun - bir Uber Kavanoz istiyorsanız sorunu çözmez.
Gavin Baumanis

7
Bu benim için işe yarıyor ama ... neden imza dosyalarını görmezden gelmek zorunda kaldık? Im emin manifest orada bir nedeni vardır ....
Jeryl Cook

4
Yukarıda yaptıktan sonra "mvn clean" yaptığınızdan emin olun!
codeinjuice

4
@JerylCook İmza dosyaları, bu kavanozun içeriğinin bu dosyalara sahip olduğunu göstermek için vardır. Bir uber kavanozu yaptığınızda, kavanoza bir sürü dosya eklersiniz ve bu nedenle imza doğru değildir. Gerçekten isterseniz, yeni kavanozu tekrar imzalayabilirsiniz, ancak elbette eski imzanızla değil, imzanızla olurdu. Alternatif olarak, uber kavanozunu dağıtamazsınız, bunun yerine imzalı kavanozu ayrı bir dosya olarak dahil edebilirsiniz, ancak daha sonra bir uber kavanozunun amacını bozar.
LadyCailin

139

Gradle kullanan ve bir yağ kavanozu oluşturup kullanmaya çalışanlar için, aşağıdaki sözdizimi yardımcı olabilir.

jar {
    doFirst {
        from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' 
}

1
Bu temelde META-INF dizini içinde .RSA, .SF veya .DSA uzantılı tüm dosyaları hariç tutar.
Keith P

9
Bir jar dosyasını imzalamak bu dosyaları META-INF altına ekler, ancak dahil edildiğinde, imzalar artık kavanoz içeriğiyle aynı fikirde değildir. Böylece bunların kaldırılması imza uyumsuzluğunu önler.
Peter N. Steinmetz

1
Benzer bir soru kesinlikle
gradle'da

3
Bu benim için işe yaramadı. Bu komuta sahip olan excludegörevime koymak fatJarzorunda kaldım configurations.compile.collect. Bkz. Stackoverflow.com/a/31426413/103412
Torsten

1
Bu da hatayı çözerError: Could not find or load main class App Caused by: java.lang.ClassNotFoundException: App
vonox7

57

Bağımlılıklarınızdan bazıları muhtemelen imzalı jarfiles. Hepsini bir büyük jarfile birleştirdiğinizde, karşılık gelen imza dosyaları hala mevcut ve artık "büyük birleşik" jarfile eşleşmiyor, bu nedenle çalışma zamanı jar dosyasının kurcalandığını düşünmeyi durduruyor (ki ... ) BT.

Sorunu, jarfile bağımlılıklarınızdan imza dosyalarını kaldırarak çözebilirsiniz. Ne yazık ki, bunu karıncada bir adımda yapmak mümkün değil .

Ancak, Ant ile bu çalışmayı, her jarfile bağımlılığını özel olarak adlandırmadan iki adımda elde edebildim:

<target name="jar" depends="compile" description="Create one big jarfile.">
    <jar jarfile="${output.dir}/deps.jar">
        <zipgroupfileset dir="jars">
            <include name="**/*.jar" />
        </zipgroupfileset>
    </jar>
    <sleep seconds="1" />
    <jar jarfile="${output.dir}/myjar.jar" basedir="${classes.dir}">
        <zipfileset src="${output.dir}/deps.jar" excludes="META-INF/*.SF" />
        <manifest>
            <attribute name="Main-Class" value="com.mycompany.MyMain" />
        </manifest>
    </jar>
</target>

Uyku öğesinin, gelecekte değişiklik tarihlerine sahip dosyalar hakkındaki hataları önlemesi gerekiyor .

Bağlantılı dizilerde bulduğum diğer varyasyonlar benim için işe yaramadı.


Kavanozlarınızı belirtmek için farklı bir yol kullanarak tek bir adımda yapmak mümkündür: <jar destfile = "build / myjar.jar"> <restrict> <not> <name name = "META-INF / *. SF" /> </not> <archives> <zips> <fileset dir = "jarfolder", = " * / .jar" /> </zips> </archives> </restrict> </jar>
DieterDP

57

Lütfen aşağıdaki komutu kullanın

zip -d yourjar.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*SF'

4
Teşekkür ederim, intellij 14 ile bu sorunu yaşadım ve çözümünüz benim için çalışıyor!
Mohamad Kouhi Moghadam

5
Teşekkür ederim, Windows'ta benim için çalıştı. Kavanoz 7zip ile açıldı, .SF dosyalarını sildi. Silinecek .RSA dosyam yoktu
candino

3
Vay canına, bu çözümün inanılmaz olduğunu söyleyebilir miyim (ve yol boyunca çok güçlü bir şey öğrendim!)
Dylan_Larkin

@Dylan_Larkin yorumuna katılıyorum, bu benim için çözen şey.
Felipe Valdes

26

IntelliJ IDEA 14.01 kullanırken bu sorunu yaşadım.

Bunu düzeltmeyi başardım:

Dosya-> Proje Yapısı-> Yeni Ekle (Eserler) -> jar-> Modülden Jar Oluştur Penceresindeki Bağımlılıklara Sahip Modüllerden:

Ana sınıfınızı seçin

Kütüphanelerden JAR Dosyası Çıktı dizinine kopyalamayı seçin ve manifest yoluyla bağlantı kurun


2
Bağımlı kavanozları hedef kavanoza koymak mümkün müdür?
coder.chenzhi

çözümleriniz iyi çalışıyor !! çok teşekkürler!
hzitoun

19

Güvenlik zaten zor bir konudur, ancak en popüler çözümün güvenlik imzalarını silmek olduğunu hayal kırıklığına uğrattım. JCE bu imzaları gerektirir . Maven gölgesi, imzaları META-INF'ye yerleştiren BouncyCastle jar dosyasını patlıyor, ancak BouncyCastle imzaları yeni bir uber-jar (yalnızca BC jar için) için geçerli değil ve bu iş parçacığında Geçersiz imza hatasına neden olan şey bu .

Evet, @ruhsuzbaykus tarafından önerilen imzaları hariç tutmak veya silmek, orijinal hatayı ortadan kaldırır, ancak yeni, şifreli hatalara da yol açabilir:

java.security.NoSuchAlgorithmException: PBEWithSHA256And256BitAES-CBC-BC SecretKeyFactory not available

Algoritmayı nerede bulacağınızı açıkça belirterek:

SecretKeyFactory.getInstance("PBEWithSHA256And256BitAES-CBC-BC","BC");

Farklı bir hata alabildim:

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC

JCE, aynı iş parçacığının başka bir yerindeki öneriyi izleyerek şifreleme imzalarını sildiğimiz için sağlayıcıyı doğrulayamıyor .

Bulduğum çözüm , BouncyCastle imzasını tek bir yürütülebilir kavanozda korumak için bir kavanoz içinde kavanoz yaklaşımı kullanan yürütülebilir packer eklentisidir .

GÜNCELLEME :

Bunu yapmanın bir başka yolu (doğru yol?) Maven Jar imzalayıcısını kullanmaktır . Bu, güvenlik hataları almadan Maven gölgesini kullanmaya devam etmenizi sağlar. ANCAK, bir kod imzalama sertifikanız olması gerekir (Oracle "Java Kod İmzalama Sertifikası" için arama yapmanızı önerir). POM yapılandırması şöyle görünür:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>org.bouncycastle:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>your.class.here</mainClass>
                    </transformer>
                </transformers>
                <shadedArtifactAttached>true</shadedArtifactAttached>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jarsigner-plugin</artifactId>
    <version>1.4</version>
    <executions>
        <execution>
            <id>sign</id>
            <goals>
                <goal>sign</goal>
            </goals>
        </execution>
        <execution>
            <id>verify</id>
            <goals>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <keystore>/path/to/myKeystore</keystore>
        <alias>myfirstkey</alias>
        <storepass>111111</storepass>
        <keypass>111111</keypass>
    </configuration>
</plugin>

Hayır, JCE'nin kendinden imzalı bir sertifikayı tanımasını sağlamanın bir yolu yoktur, bu nedenle BouncyCastle sertifikalarını korumanız gerekiyorsa, jar-in-jar eklentisini kullanmanız veya bir JCE sertifikası almanız gerekir.


Bu, iş yoğun olsa bile, bunu yapmanın kesinlikle doğru yoludur. Onaylanmış cevabı kullanarak uyarıları ayrıntılı olarak işaret ettiğiniz için teşekkür ederiz. JCE sertifikasının Sun tarafından imzalanması gerekip gerekmediğini biliyor musunuz? Veya yapabilir
WiteCastle

1
Kod imzalayan sertifikalar verebilecek üçüncü taraflar vardır. Seçenekleri görmek için "Java Kod İmzalama Sertifikası" nı arayın.
MattW

Sen, efendim, benim günümü yaptın!
socona

Bana yardım etti. Bu kütüphanede, kullanmadığım bazı dosyalar var, bu yüzden şişman dosya ile bana yardım etmeleri dışında
Saidolim

14

Aynı sorunla karşı karşıya kaldım, bir yere referans yaptıktan sonra aşağıdaki gibi çalıştı:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <configuration>
        <createDependencyReducedPom>false</createDependencyReducedPom>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <filters>
                    <filter>
                        <artifact>*:*</artifact>
                        <excludes>
                            <exclude>META-INF/*.SF</exclude>
                            <exclude>META-INF/*.DSA</exclude>
                            <exclude>META-INF/*.RSA</exclude>
                        </excludes>
                    </filter>
                </filters>
            </configuration>
        </execution>
    </executions>
</plugin>

1
Bu, sorunumu hızla çözdü! Tamlık için, bu maven-shade-pluginetikete girmelidir .
Kuzeko

1
@Kuzeko Öneriyi öneren kişi ile güncelledi. Teşekkürler
m.nguyencntt

8

Kavanoz dosyanızı karınca ile oluşturduğunuzu varsayarak, karıncaya META-INF dirsini dışarıda bırakması talimatını verebilirsiniz. Bu benim karınca hedefimin basitleştirilmiş bir versiyonudur:

<jar destfile="app.jar" basedir="${classes.dir}">
    <zipfileset excludes="META-INF/**/*" src="${lib.dir}/bcprov-jdk16-145.jar"></zipfileset>
    <manifest>
        <attribute name="Main-Class" value="app.Main"/>
    </manifest>
</jar>

bu satırları nereye eklemeliyim?
Addi.Star

4

Son zamanlarda projelerimde IntelliJ kullanmaya başladım. Ancak, bazı meslektaşlarım hala Eclipse'yi aynı projelerde kullanıyor. Bugün, IntelliJ tarafından oluşturulan jar dosyasını yürüttükten sonra aynı hatayı aldım. Buradaki tüm çözümler neredeyse aynı şeyden bahsederken, hiçbiri benim için kolayca işe yaramadı (muhtemelen ANT kullanmıyorum, maven build beni http://cwiki.apache.org/ adresine yönlendiren başka hatalar verdi. confluence / display / MAVEN / MojoExecutionException ve ayrıca kendim imzalı kavanozların ne olduğunu anlayamadım!)

Sonunda bu bana yardımcı oldu

zip -d demoSampler.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*SF'

Tahmin et kavanoz dosyamdan ne kaldırıldı ?!

deleting: META-INF/ECLIPSE_.SF 
deleting: META-INF/ECLIPSE_.RSA

Sorun, tutulma ile ilgili bazı dosyalarla ilgili gibi görünüyor.


4

gradleŞişman bir kavanoz oluştururken build.gradledosyayı dışlama satırı ile güncellerken de aynı sorunu yaşadım , sorunu düzeltti.

jar {
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA'
    manifest {
        attributes 'Main-Class': 'com.test.Main'
    }
}

1
Günlerce hata ayıklama yapıyordum, bu benim yağ kavanozu sorunumu çözdü.
sysuser

Hata ayıklama yolu, yağ kavanozunu jmeter lib dizinine koymaktır. Lib / ext'de sorunlu bir kavanoza sahipseniz, bu sorun belirgin olmayacaktır, bunun yerine stackoverflow.com/questions/37624187/…
sysuser

1
'META-INF / *. RSA', 'META-INF / *. SF', 'META-INF / *. DSA' hariç. Bu eksikti, bazı bağımlı kavanozlar soruna neden oluyordu
Nirbhay Mishra

3

Gradle kullanıyorsanız, tam bir farJar görevi:

version = '1.0'
//create a single Jar with all dependencies
task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',  
            'Implementation-Version': version,
            'Main-Class': 'com.example.main'
    }
    baseName = project.name + '-all'
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
    exclude 'META-INF/*.RSA', 'META-INF/*.SF','META-INF/*.DSA' 
    with jar
}

2

Yeni kavanozdaki META-INF klasörünü eski kavanozla karşılaştırın (yeni kütüphaneler eklemeden önce). Yeni dosyalar olması muhtemeldir. Evetse, bunları kaldırabilirsiniz. Yardım etmeli. Saygılarımızla, 999michal


2

Bir strateji, her Jar dosyasından imzanın kaldırılmasını basitleştirmek için ANT'nin kullanılmasını içerir. Aşağıdaki adımlarla devam eder:

  1. MANIFEST.MF dosyasını geçici bir dosyaya kopyalama
  2. Ad ve SHA girdilerini geçici dosyadan kaldırma
  3. Geçici bildirim ile geçici bir Jar dosyası oluşturma
  4. Geçici manifestin kaldırılması
  5. Orijinal Jar dosyasını geçici olanla değiştirme

İşte işi bir ANT makrodef :

<macrodef name="unsignjar" description="To unsign a specific Jar file">
    <attribute name="jarfile" 
        description="The jar file to unsign" />
    <sequential>
<!-- Copying to the temporary manifest file -->
        <copy toFile="@{jarFile}_MANIFEST.tmp">
            <resources>
                <zipentry zipfile="@{jarFile}" name="META-INF/MANIFEST.MF"/>
            </resources>
        </copy>
<!-- Removing the Name and SHA entries from the temporary file -->
        <replaceregexp file="@{jarFile}_MANIFEST.tmp" match="\nName:(.+?)\nSH" replace="SH" flags="gis" byline="false"/>
        <replaceregexp file="@{jarFile}_MANIFEST.tmp" match="SHA(.*)" replace="" flags="gis" byline="false"/>
<!-- Creating a temporary Jar file with the temporary manifest -->
        <jar jarfile="@{jarFile}.tmp"
            manifest="@{jarFile}_MANIFEST.tmp">
            <zipfileset src="@{jarFile}">
                <include name="**"/>
                <exclude name="META-INF/*.SF"/>
                <exclude name="META-INF/*.DSA"/>
                <exclude name="META-INF/*.RSA"/>
            </zipfileset>
        </jar>
<!-- Removing the temporary manifest -->
        <delete file="@{jarFile}_MANIFEST.tmp" />
<!-- Swapping the original Jar file with the temporary one -->
        <move file="@{jarFile}.tmp"
              tofile="@{jarFile}"
              overwrite="true" />
</sequential>

'

Daha sonra tanım bir ANT görevinde şu şekilde çağrılabilir:

<target name="unsignJar">
    <unsignjar jarFile="org.test.myjartounsign.jar" />
</target>

2

Hata: Bir JNI hatası oluştu, lütfen kurulumunuzu kontrol edin ve tekrar deneyin "main" iş parçacığındaki istisna java.lang.SecurityException: sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java adresindeki Manifest ana öznitelikleri için geçersiz imza dosyası özeti: 314) java.util.jar.JarVerifier.processEntry şirketinde (SignatureFileVerifier.java:268) java.util.jar.JarVerifier.processEntry (JarVerifier.java:316) : 228) sun.misc.URLClassPath $ JarLoader $ 2.getInputStream'de (JarFile.java:450) java.util.jar.JarFile.initializeVerifier'de (JarFile.java:383) .java: 977) sun.misc.Resource.cachedInputStream'de (Resource.java:77) sun.misc.Resource.getByteBuffer'da (Resource.java:160) java.net.URLClassLoader.defineClass (URLClassLoader.java:454) java.net.URLClassLoader.access şirketinde 100 $ (URLClassLoader.java:73) java.net.URLClassLoader.access $ 100 (URLClassLoader.java:73) java.lang.CloadLlassoloadLlassolassLloadLlassoloadLlassLlassLloadLlassLloadLlassLlassLlassLloadLlassLlassLlasso Sun.launcher.LauncherHelper.checkAndLerHerAdeLoHerHoadMain şirketinde java.lang.ClassLoader.loadClass (ClassLoader.java:357) 'de sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) java: 495)java.net.URLClassLoader.findClass (URLClassLava.jac1: 1 adresinde java.security.AccessController.doPrivileged (Native Method) konumunda (URLClassLoader.java:368) çalıştırın. ) java.lang.ClassLoader.loadClass (ClassLoader.java:424) şirketinde sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at sun .launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)java.net.URLClassLoader.findClass (URLClassLava.jac1: 1 adresinde java.security.AccessController.doPrivileged (Native Method) konumunda (URLClassLoader.java:368) çalıştırın. ) java.lang.ClassLoader.loadClass (ClassLoader.java:424) şirketinde sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at sun .launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)331) sunavauncher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495) şirketinde java.lang.ClassLoader.loadClass (ClassLoader.java:357)331) sunavauncher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495) şirketinde java.lang.ClassLoader.loadClass (ClassLoader.java:357)

Bana ne yardımcı oldu (IntelliJ IDEA 2016.3): Dosya -> Proje Yapısı -> Eserler -> JAR Ekle -> Ana Sınıfı Seç -> "çıkış dizinine kopyala ve manifest üzerinden bağlantı" -> Tamam -> Uygula -> Oluştur - > Yapı Yapıları ... -> Yapı



1

Orijinal kütüphaneleri açmadan veya kurcalamadan ancak özel bir JAR sınıf yükleyicisiyle bir Fat JAR çözümü arıyorsanız, buradaki projeme bir göz atın .

Feragatname: Kodu yazmadım, sadece paketledim ve Maven Central'da yayınladım ve beni oku ve nasıl kullanacağımı açıkladım.

Ben şahsen BouncyCastle bağımlılıkları içeren runnable uber JARs oluşturmak için kullanın. Belki sizin için de yararlıdır.


0

Kabul edilen çözümle ilgili sorun yaşayanlar için, kaynağı DontIncludeResourceTransformer ile gölgeli kavanozdan hariç tutmanın başka bir yolu vardır:

https://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#DontIncludeResourceTransformer

          <transformers>
            <transformer implementation="org.apache.maven.plugins.shade.resource.DontIncludeResourceTransformer">
                <resource>BC1024KE.DSA</resource>
            </transformer>
          </transformers>

Shade 3.0'dan, bu transformatör kaynakların bir listesini kabul eder. Bundan önce, her biri tek bir kaynakla birden fazla transformatör kullanmanız gerekir.


0

Intellij "yönetilmeyen pom dosyaları bulundu" dediğinde, alt satırda "Maven Projesi Olarak Ekle" yi tıkladığımda Intellij'de bu oldu. Bu arada out klasörü zaten oluşturuldu. Bu yüzden son zamanlarda bir değişiklik olmadı.

Klasörü silmek ve programı çalıştırmak benim için sorunu çözdü. sonra out klasörü yeniden oluşturuldu.

Little Fox'un cevabına da bakınız. Aldığım hata onunkine çok benziyordu.


-1

Benzer bir sorun yaşadım. Bunun nedeni, Windows kutumdaki varsayılandan farklı bir JRE içeren bir JDK kullanarak derlememdi.

Doğru java.exe kullanarak sorunumu çözdü.


-2

Böyle bir Xamarin.Android ciltleme projesi için JAR dosyalarını bağlamaya çalışırken bunu alıyorsanız:

JARTOXML: uyarı J2XA006: com.your.class yansıtılırken eksik sınıf hatası oluştu: Manifest ana özellikleri için geçersiz imza dosyası özeti

Winzip kullanarak JAR dosyalarını açın ve meta-inf dizinlerini silin. Yeniden oluştur - iş bitti


1
Bu korkunç bir teknik. Kesinlikle Korkunç. Düzeltmeleri yerel olarak gelen kavanozlarda değişiklik yapmayın
sinisterrook
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.