May 4th, 2009
maven assembly의 중복 entry 문제
maven assembly plugin에 jar-with-dependencies descriptor를 주어 사용할 때가 있는데 문제가 있었던거 같은데 그 동안 몰랐다.
최종 결과물에 classes의 내용이 두번씩 들어간다.

이는 dependency를 하나도 정의하지 않은 초간단 maven project에서도 발생한다.
XML:
-
<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/maven-v4_0_0.xsd">
-
<modelVersion>4.0.0</modelVersion>
-
<groupId>net.hanjava</groupId>
-
<artifactId>simplest</artifactId>
-
<packaging>jar</packaging>
-
<version>1.0-SNAPSHOT</version>
-
<name>simplest</name>
-
<url>http://hanjava.net/call-151</url>
-
<build>
-
<plugins>
-
<plugin>
-
<artifactId>maven-assembly-plugin</artifactId>
-
<configuration>
-
<descriptorRefs>
-
<descriptorRef>jar-with-dependencies</descriptorRef>
-
</descriptorRefs>
-
</configuration>
-
</plugin>
-
</plugins>
-
</build>
-
</project>
zip format내부에 같은 path를 같은 entry를 여러번 넣을 수 있다는 점이 의외다.
해당 이슈는 이미 보고되어있고 assembly plugin 2.2-beta-3에서 수정되었다는데 안되는듯. (수정합니다. 2.2-beta-3에서 잘 됩니다. 제 실수네요.)
대부분의 경우 위 이슈는 실행을 방해하지 않기 때문에 별 문제가 되지 않는다.
하지만 android의 dex로 변환할때 문제가 생긴다. jar내부의 constant pool을 공유하는 dex의 특성때문에 민감하거든.
수제 assembly descriptor를 제공해서 해결.