В моем Java-проекте я использую Ant для сборки.Учитывая, что у меня довольно много зависимостей, я хотел бы отправить приложение со всеми библиотеками, упакованными в один jar (и главное приложение в другой).
В настоящее время я использую следующий код для этого:
<target name="package-to-2-jars" depends="jar">
<property name="store.jar.name" value="main"/>
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<property name="storelibs.jar" value="${store.dir}/sdk.jar"/>
<echo message="Packaging main classes and libraries into two separate JARs at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
<jar destfile="${store.dir}/temp_final_lib.jar" filesetmanifest="skip">
<zipgroupfileset dir="lib" includes="*.jar" excludes="*fonts*.jar"/>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<zip destfile="${storelibs.jar}">
<zipfileset src="${store.dir}/temp_final_lib.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
<delete file="${store.dir}/temp_final_lib.jar"/>
</target>
Сначала все выглядело красиво.Тем не менее, в некоторых случаях что-то не работает, как ожидалось.Через некоторое время я понял, что мой sdk.jar содержит несколько файлов с одинаковым именем.
Дело в том, что некоторые из моих библиотек зависимостей (несколько jar одного и того же SDK) поставляются со свойствамифайл.Каждый из них содержит разные данные, но все они имеют одно и то же имя.Можно ли упаковать эти библиотеки в один jar-файл таким образом, чтобы приложение могло обращаться к разным файлам с одинаковыми именами?
Все, что я до сих пор нашел, это дубликат атрибут задачи zip / jar, но это не сработает для меня.Мне нужно сохранить данные из всех файлов.