.jar를 실행하려고 할 때“잘못된 서명 파일”


450

내 Java 프로그램은 jar 파일로 패키지되어 있으며 외부 jar 라이브러리 인 bouncy castle를 사용 합니다. 내 코드는 정상적으로 컴파일되지만 jar를 실행하면 다음 오류가 발생합니다.

스레드 "main"의 예외 java.lang.SecurityException : Manifest 기본 속성에 대한 유효하지 않은 서명 파일 요약

나는 한 시간 이상 설명을 검색하면서 가치가 거의 없었습니다. 누군가이 오류를 전에 본 적이 있고 도움을 줄 수 있다면 나는 의무가 있습니다.


1
당신은 당신의 자신의 항아리에 서명하려고합니까? 그렇다면 어떻게 서명하려고합니까?
Cogsy

아니, 적어도 나는 생각하지 않습니다. Xcode가 자체 서명을 시도했지만이 기능을 끄는 설정이없는 것 같습니다.

구현 된 인터페이스를 포함하는 jar도 서명되었는지 확인하는 것을 잊지 마십시오!
gaurav

답변:


47

여기에 나열된 솔루션은 포인터를 제공 할 수 있습니다.

매니페스트 기본 속성에 대한 잘못된 서명 파일 다이제스트

결론 :

공식 jar을 그대로 유지하고 응용 프로그램 jar 파일의 매니페스트 파일에 종속성으로 추가하는 것이 가장 좋습니다.


3
매니페스트 파일에 이것을 어떻게 반영합니까? 전에 한 번도 편집 한 적이 없습니다. Xcode를 사용하고 있으며 일반적인 관례는 외부 jar 라이브러리를 myproject / lib 디렉토리에 포함시켜 포함시키는 것입니다.

@ user123003 .. Intelli-J와 마찬가지로
MikeM

13
불행히도 우리 중 일부는 "maven shade plugin"과 같은 것을 사용하므로 원래 항아리의 그대로 사본을 포함하는 것은 쉽지 않습니다 ...
rogerdpack

사이트 에서 답할 수있는 수치스러운 플러그 : stackoverflow.com/a/30922181/448779
foo

maven-assembly-plugin은 어떻습니까? 그것은 내 경우에는이 문제를 해결
jhenya-D

1083

만들려고이 오류 가지고 사람들을 위해 동네 짱 - 항아리 와이 maven-shade-plugin솔루션은 플러그인 구성에 다음 행을 추가하여 매니페스트 서명 파일을 제외하는 것입니다 :

<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
uber-jar 에이 방법을 사용했으며 훌륭하게 작동했습니다. maven.apache.org/plugins/maven-shade-plugin/examples/… 에 포함 된 파일을 필터링하는이 방법을 보여주는 전체 POM 예제가 있습니다.
M. Dudley

4
완전히 새로운 스레드를 시작하고 싶었지만 Google 검색 결과에서 1 위이기 때문에 여기에 두는 것이 좋았습니다. 여기에 나열된 줄은 사용중인 POM 파일에 있으며 응용 프로그램을 실행할 때 여전히 보안 오류가 발생합니다. 예상대로 Uber jar를 수행하지 않을 때 잘 빌드되고 물론 잘 실행됩니다. Uber Jar를 원한다면 문제가 해결되지는 않습니다.
Gavin Baumanis

7
이것은 나를 위해 작동하지만 ... 서명 파일을 무시 해야하는 이유는 무엇입니까? 확실한 이유가있을 것입니다 ....
Jeryl Cook

4
위의 작업을 수행 한 후 "mvn clean"을 수행하십시오!
codeinjuice

4
@JerylCook 서명 파일은이 jar의 내용에 이러한 파일이 있음을 나타냅니다. 동네 짱 항아리를 만들 때 항아리에 많은 파일을 추가하고 있으므로 서명이 올바르지 않습니다. 당신이 정말로 원한다면, 당신은 새로운 병에 다시 서명 할 수 있지만, 물론 그것은 오래된 병이 아니라 서명과 함께있을 것입니다. 또는 uber jar를 배포 할 수 없지만 서명 된 jar을 별도의 파일로 포함하면 uber jar의 목적을 우선적으로 상실합니다.
LadyCailin

139

gradle을 사용하고 뚱뚱한 항아리를 만들고 사용하려는 경우 다음 구문이 도움이 될 수 있습니다.

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

1
이것은 기본적으로 META-INF 디렉토리 내에 확장자가 .RSA, .SF 또는 .DSA 인 모든 파일을 제외합니다.
Keith P

9
jar 파일에 서명하면 이러한 파일이 META-INF 아래에 추가되지만 파일이 포함되면 서명이 jar 내용과 더 이상 일치하지 않습니다. 따라서 그것들을 제거하면 서명 불일치가 방지됩니다.
Peter N. Steinmetz

1
- 엄격하게 Gradle을 지방 항아리를 사용하는 방법에 대한 비슷한 질문이 stackoverflow.com/questions/4871656/...는
토마스 Sętkowski

3
이것은 나를 위해 작동하지 않았습니다. 나는 그 임무 exclude를 수행 한 내 fatJar임무 에 넣어야했다 configurations.compile.collect.
Torsten

1
이것은 또한 오류를 해결Error: Could not find or load main class App Caused by: java.lang.ClassNotFoundException: App
vonox7

57

일부 종속성은 서명 된 jar 파일 일 수 있습니다. 그것들을 모두 하나의 큰 jarfile로 결합하면 해당 서명 파일이 여전히 존재하고 더 이상 "큰 결합 된"jar 파일과 일치하지 않으므로 런타임은 jar 파일이 변조되었다고 생각하여 중단됩니다. 말하다).

jarfile 종속성에서 서명 파일을 제거하여 문제점을 해결할 수 있습니다. 불행히도 ant의 한 단계 에서이 작업을 수행 할 수 없습니다 .

그러나 다음을 사용하여 각 jarfile 종속성의 이름을 구체적으로 지정하지 않고 Ant와의 작업을 두 단계로 수행 할 수있었습니다.

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

sleep 요소는 향후 수정 날짜가있는 파일에 대한 오류 를 방지해야합니다 .

연결된 스레드에서 찾은 다른 변형이 작동하지 않았습니다.


항아리를 지정하는 다른 방법을 사용하여 한 단계로 수행 할 수 있습니다. <jar destfile = "build / myjar.jar"> <restrict> <not> <name name = "META-INF / *. SF"/> </ not> <archives> <zips> <fileset dir = "jarfolder"includes = " * / .jar"/> </ zips> </ archives> </ restrict> </ jar>
DieterDP

57

다음 명령을 사용하십시오

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

4
고맙습니다, intellij 14 에서이 문제가 있었고 귀하의 솔루션이 저에게 효과적입니다!
Mohamad Kouhi Moghadam

5
감사합니다, Windows에서 저를 위해 일했습니다. 7zip으로 항아리를 열고 .SF 파일을 삭제했습니다. 삭제할 .RSA 파일이 없습니다
candino

3
와우,이 솔루션이 정말 훌륭하다고 말할 수 있습니까?
Dylan_Larkin

@Dylan_Larkin의 의견에 동의합니다. 이것이 나를 위해 해결 한 것입니다.
Felipe Valdes

26

IntelliJ IDEA 14.01을 사용할 때이 문제가 발생했습니다.

나는 그것을 고칠 수 있었다 :

모듈에서 Jar 작성 창에 파일-> 프로젝트 구조-> 새 (아티팩트) 추가-> jar-> 종속 모듈이있는 경우 :

메인 클래스를 선택하십시오

라이브러리의 JAR 파일 출력 디렉토리로 사본을 선택하고 매니페스트를 통해 링크


2
종속 항아리를 대상 항아리에 넣을 수 있습니까?
coder.chenzhi 2018 년

당신의 해결책은 잘 작동합니다 !! 많은 감사합니다!
hzitoun

19

보안은 이미 어려운 주제이지만 가장 인기있는 솔루션은 보안 서명을 삭제하는 것입니다. JCE에는 이러한 서명이 필요합니다 . Maven shade는 서명을 META-INF에 넣는 BouncyCastle jar 파일을 분해하지만 BouncyCastle 서명은 새로운 uber-jar (BC jar에만 해당)에 유효하지 않으므로이 스레드에서 잘못된 서명 오류가 발생합니다. .

예, @ruhsuzbaykus가 제안한 서명을 제외하거나 삭제하면 실제로 원래 오류가 사라지지만 새로운 암호 오류가 발생할 수 있습니다.

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

다음과 같이 알고리즘을 찾을 위치를 명시 적으로 지정하십시오.

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

다른 오류가 발생했습니다.

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

JCE는 동일한 스레드의 다른 곳에서 제안을 수행하여 암호화 서명 삭제했기 때문에 공급자를 인증 할 수 없습니다 .

내가 찾은 솔루션 은 jar-in-jar 방식을 사용 하여 BouncyCastle 서명 을 단일 실행 가능 jar 로 유지하는 실행 가능 패커 플러그인 이었습니다 .

업데이트 :

이 작업을 수행하는 또 다른 방법 (올바른 방법?)은 Maven Jar 서명자 를 사용하는 것 입니다. 이를 통해 보안 오류없이 Maven 쉐이드를 계속 사용할 수 있습니다. 그러나 코드 서명 인증서가 있어야합니다 (Oracle은 "Java 코드 서명 인증서"를 검색하도록 제안합니다). POM 구성은 다음과 같습니다.

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

아니요, JCE가 자체 서명 된 인증서를 인식 할 수있는 방법이 없으므로 BouncyCastle 인증서를 유지해야하는 경우 jar-in-jar 플러그인을 사용하거나 JCE 인증서를 가져와야합니다.


작업 집약적 일지라도 이것이 올바른 방법입니다. 승인 된 답변을 사용하여주의 사항을 자세히 지적 해 주셔서 감사합니다. JCE 인증서에 Sun이 서명해야하는지 알고 있습니까? 또는 가능
WiteCastle

1
코드 서명 인증서를 발행 할 수있는 타사가 있습니다. 옵션을 보려면 "Java 코드 서명 인증서"를 검색하십시오.
MattW

당신은 내 하루를 만들었습니다!
socona

나를 도와주었습니다. 이 라이브러리에는 내가 사용하지 않는 일부 파일이 있으므로 fat-jar 파일을 사용하는 것을 제외하고는
Saidolim

14

어딘가에 참조한 후에도 같은 문제에 직면하여 다음과 같이 변경되었습니다.

<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
이것은 내 문제를 신속하게 해결했습니다! 완성도를 높이려면 maven-shade-plugin태그에 들어가야합니다 .
Kuzeko

1
@Kuzeko 귀하의 제안으로 답변을 업데이트했습니다. 감사합니다
m.nguyencntt

8

개미로 jar 파일을 빌드한다고 가정하면 개미에게 META-INF 디렉토리를 제거하도록 지시 할 수 있습니다. 이것은 내 개미 대상의 단순화 된 버전입니다.

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

이 줄을 어디에 추가해야합니까?
Addi.Star

4

최근에 프로젝트에서 IntelliJ를 사용하기 시작했습니다. 그러나 내 동료 중 일부는 여전히 동일한 프로젝트에서 Eclipse를 사용합니다. 오늘은 IntelliJ에서 만든 jar 파일을 실행 한 후에도 동일한 오류가 발생했습니다. 여기에있는 모든 솔루션이 거의 똑같은 것에 대해 이야기하지만, 그들 중 누구도 나를 위해 쉽게 일하지 못했습니다 (아마도 ANT를 사용하지 않기 때문에 maven 빌드는 저에게 http://cwiki.apache.org/ confluence / display / MAVEN / MojoExecutionException , 또한 서명 된 항아리가 무엇인지 알 수 없었습니다!)

마지막으로, 이것은 나를 도왔습니다

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

내 jar 파일에서 무엇이 제거되었는지 맞춰보세요?!

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

이 문제는 일식 관련 파일과 관련이있는 것으로 보입니다.


4

gradle뚱뚱한 Jar를 만들 때 와 같은 문제가 발생 build.gradle하여 제외 줄로 파일을 업데이트 하면 문제가 해결되었습니다.

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
나는 며칠 동안 디버깅하고 있었고, 이것은 내 지방 병 문제를 해결했다.
sysuser 2011

내가 디버깅 한 방법은 지방 항아리를 jmeter lib 디렉토리에 넣는 것입니다. lib / ext에 문제가있는 jar 파일이있는 경우이 문제는 분명하지 않으며 stackoverflow.com/questions/37624187/…에
sysuser

1
'META-INF / *. RSA', 'META-INF / *. SF', 'META-INF / *. DSA'를 제외합니다. 누락되었으며 일부 종속 항아리에서 문제가 발생했습니다
Nirbhay Mishra

3

gradle을 사용하는 경우 전체 farJar 작업이 있습니다.

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

새 jar의 META-INF 폴더와 이전 jar를 비교하십시오 (새 라이브러리를 추가하기 전에). 새 파일이있을 수 있습니다. 그렇다면 제거 할 수 있습니다. 도움이 될 것입니다. 감사합니다, 999michal


2

전략은 ANT를 사용하여 각 Jar 파일에서 서명을 간단하게 제거하는 것으로 구성됩니다. 다음 단계로 진행됩니다.

  1. 임시 파일에 MANIFEST.MF 복사
  2. 임시 파일에서 이름SHA 항목 제거
  3. 임시 매니페스트를 사용하여 임시 Jar 파일 만들기
  4. 임시 매니페스트 제거
  5. 원래 Jar 파일을 임시 파일로 교체

다음은 작업을 수행 하는 ANT macrodef입니다 .

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

`

그런 다음 ANT 태스크에서 이러한 방식으로 정의를 호출 할 수 있습니다.

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

2

오류 : JNI 오류가 발생했습니다. 설치를 확인한 후 다시 시도하십시오. "main"스레드 예외 java.lang.SecurityException : sun.security.util.SignatureFileVerifier.processImpl (SignatureFileVerifier.java의 Manifest 기본 속성에 대한 서명 파일 다이제스트가 올바르지 않습니다. 314) sun.security.util.SignatureFileVerifier.process (SignatureFileVerifier.java:268) at java.util.jar.JarVerifier.processEntry (JarVerifier.java:316) at java.util.jar.JarVerifier.update (JarVerifier.java : 228) java.util.jar.JarFile.initializeVerifier (JarFile.java:383) java.util.jar.JarFile.getInputStream (JarFile.java:450) at sun.misc.URLClassPath $ JarLoader $ 2.getInputStream (URLClassPath .java : 977) sun.misc.Resource.cachedInputStream (Resource.java:77) at sun.misc.Resource.getByteBuffer (Resource.java :160) java.net.URLClassLoader.access $ 100 (URLClassLoader.java:73)의 java.net.URLClassLoader.1 : run (URLClassLoader.java:368)의 java.net.URLClassLoader.defineClass (URLClassLoader.java:454) java.net.URLClassLoader.findClass (URLClassLoader.java:361) java.lang.ClassLoader.loadClass에서 java.net.URLClassLoader $ 1.run (URLClassLoader.java:362) java.security.AccessController.doPrivileged (기본 메소드) sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper의 java.lang.ClassLoader.loadClass (ClassLoader.java:357)의 sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331)의 (ClassLoader.java:424) 자바 : 495)java.net.URLClassLoader.findClass (URLClassLoader.java:361의 java.security.AccessController.doPrivileged (네이티브 메소드)의 java.net.URLClassLoader $ 1.run (URLClassLoader.java:362)의 run (URLClassLoader.java:368) ) java.lang.ClassLoader.loadClass (ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at java.lang.ClassLoader.loadClass (ClassLoader.java:357) at sun .launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)java.net.URLClassLoader.findClass (URLClassLoader.java:361의 java.security.AccessController.doPrivileged (네이티브 메소드)의 java.net.URLClassLoader $ 1.run (URLClassLoader.java:362)의 run (URLClassLoader.java:368) ) java.lang.ClassLoader.loadClass (ClassLoader.java:424) at sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java:331) at java.lang.ClassLoader.loadClass (ClassLoader.java:357) at sun .launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)331) java.lang.ClassLoader.loadClass (ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)331) java.lang.ClassLoader.loadClass (ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:495)

나에게 도움이 된 것 (IntelliJ IDEA 2016.3) : 파일-> 프로젝트 구조-> 아티팩트-> JAR 추가-> 기본 클래스 선택-> "출력 디렉토리에 복사 및 매니페스트를 통해 링크"-> 확인-> 적용-> 빌드- > 아티팩트 빌드 ...-> 빌드



1

원래 라이브러리의 압축을 풀거나 변경하지 않고 특수 JAR 클래스 로더를 사용하여 Fat JAR 솔루션을 찾고 있다면 여기 에서 내 프로젝트를 살펴보십시오 .

면책 조항 : 코드를 작성하지 않고 패키지로 만들어 Maven Central에 게시하고 read-me에서 코드 사용법을 설명합니다.

BouncyCastle 종속성을 포함하는 실행 가능한 uber JAR을 만드는 데 개인적으로 사용합니다. 어쩌면 당신에게도 도움이 될 것입니다.


0

허용되는 솔루션에 문제가있는 사람들을 위해 DontIncludeResourceTransformer를 사용하여 음영 처리 된 항아리에서 리소스를 제외하는 다른 방법이 있습니다.

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부터이 변환기는 리소스 목록을 허용합니다. 그 전에는 각각 하나의 리소스로 여러 개의 변압기를 사용해야합니다.


0

Intellij가 "관리되지 않는 pom 파일을 찾았습니다"라고 말했을 때 결론에서 "Maven 프로젝트로 추가"를 클릭하면 Intellij에서 이런 일이 발생했습니다. 한편 out 폴더는 이미 생성되었습니다. 따라서 최근 변경 사항이 없었습니다.

폴더를 삭제하고 프로그램을 실행하면 문제가 해결되었습니다. 그런 다음 out 폴더가 다시 작성되었습니다.

Little Fox의 답변도 참조하십시오. 내가받은 오류는 그의 것과 매우 유사했습니다.


-1

나는 비슷한 문제가 있었다. 그 이유는 Windows 상자의 기본 JRE와 다른 JRE를 사용하여 JDK를 사용하여 컴파일했기 때문입니다.

올바른 java.exe를 사용하면 문제가 해결되었습니다.


-2

Xamarin.Android 바인딩 프로젝트의 JAR 파일을 바인딩하려고 할 때 다음과 같이 표시됩니다.

JARTOXML : 경고 J2XA006 : com.your.class를 반영하는 동안 누락 된 클래스 오류가 발생했습니다. Manifest 기본 속성에 대한 유효하지 않은 서명 파일 요약

Winzip을 사용하여 JAR 파일을 열고 meta-inf 디렉토리를 삭제하십시오. 재 구축-작업 완료


1
이것은 끔찍한 기술입니다. 절대적으로 끔찍합니다. 로컬로 수정하여 들어오는 항아리를 변경하지 마십시오
sinisterrook
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.