개미를 사용하여 Java jar 파일을 작성합니다. "zipfileset src ="xxx.jar ""zipfileset src = "yyy.jar"를 사용하여 추가 jar를 포함해야하며 xxx.jar와 yyy.jar는 SAME 정규화 된 클래스 이름을 가진 클래스를 갖습니다. 결과 jar 파일에 중복 클래스 이름이 있습니다. 복제본의 잠재적 영향은 무엇입니까?java jar에서 중복 클래스가 갖는 영향은 무엇입니까?
감사합니다.
개미를 사용하여 Java jar 파일을 작성합니다. "zipfileset src ="xxx.jar ""zipfileset src = "yyy.jar"를 사용하여 추가 jar를 포함해야하며 xxx.jar와 yyy.jar는 SAME 정규화 된 클래스 이름을 가진 클래스를 갖습니다. 결과 jar 파일에 중복 클래스 이름이 있습니다. 복제본의 잠재적 영향은 무엇입니까?java jar에서 중복 클래스가 갖는 영향은 무엇입니까?
감사합니다.
복제본이 번이면 아무 것도로드되지 않습니다. –
그렇지 않은 경우 클래스로드 순서가 마음에 들지 않으므로 다른 버전이 필요할 수 있습니다.
은이며 클래스 경로 항목은 나열된 순서대로 검색됩니다 (this classpath doc). 하지만 이것은 클래스 경로 생성을 완전히 제어하는 경우에만 관련이 있습니다 (예를 들어 웹 앱과는 달리).
나는 데이브 동의
예, 정확히 중복 된 구현이 있습니다. 감사합니다. 알았어. –
(클래스 경로 와일드 카드는 비 결정적 순서를 만드는 것이다.주의 할로).
그가 제안하는 함정을 피하기 위해 네임 스페이스로 분리 할 수 있습니까?
일반적으로이 상황은 매우 권장되지 않으며 이므로 피해야합니다.
Java의 Jars는 클래스 파일의 컨테이너입니다. java는 클래스 경로를보고 클래스 파일을로드하는 클래스 로더를 사용합니다. 그래서 같은 클래스 x.y.Foo를 가진 2 개의 jar 파일 인 A.jar와 B.jar 파일을 가지고 있다면, classpath에있는 jar 파일의 클래스가로드 될 것입니다. 클래스 경로가 A.jar이면 B.jar (이 순서대로) A.jar의 Foo 클래스가 런타임에 사용됩니다. 이 불일치로 인해 내 경험에서 버그 수정이 어려울 수 있습니다.
. "src"대신 zipfileset에 "dir"속성을 포함하도록 ant 빌드 파일을 변경합니다. –
whats mean duplicated? 같은 패키지에 같은 이름을 가진 2 개의 클래스를 가질 수는 없지만 (프로젝트가 컴파일되지 않더라도), "ok"인 다른 패키지에 같은 이름의 클래스가 2 개 있다는 것을 의미하는 경우입니다.
별도로 사용되는 2 개의 jar : xxx.jar 및 yyy.jar이 있습니다. 그들은 부분적으로 정확한 구현을 공유하고 있습니다. 또한이 2 병을 포함하는 다른 항아리를 만들고 있습니다. 따라서 결과 jar 파일을 열면 같은 패키지에 중복 된 클래스 이름이 표시됩니다. –
질문, 두 클래스 모두 동일한 기능을 갖고 있습니까? 사실이라면 하나의 jar 만 가리키고이를 피할 수 있습니다. 예 : yyy.jar (클래스를 제거하고 xxx.jar {keep class} 사용) – elopez
내가 여기에 설명이 표시되지 않는 또 다른 대답은 당신이 당신의 항아리, Aars의 서명 할 계획이라면, 당신은
jarsigner: unable to sign jar: java.util.zip.ZipException: duplicate entry: com/foo/bar/baz.java
왜 당신이 그렇게하고 싶어 중복 항목을 가지고 불평 signjar 다음을 APK가 있다는 것입니다 ? – Bhushan