Блог веб-программиста

5Июн/100

Запаковываем проект в один JAR для запуска на Hadoop

Сегодня потребовалось запаковать проект на Java в один JAR файл. Нужно мне это для того, чтобы не мучиться с подключением сторонних jar и их дистрибьюции на кластер Hadoop Map Reduce. Да и к тому же, параметр -libjars из документации у меня почему то не работал.

Проект мой компилируется через ant. Поэтому самым простым  решением для этой задачи является модификация build.xml.

Открываем build.xml и прямо перед закрывающим тегом </project> пишем:


<target name="package-for-store" depends="jar">
<property name="store.jar.name" value="YourProjectNameHere"/>

<!-- don't edit below this line -->

<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>

<echo message="Packaging ${application.title} into a single JAR 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"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>

<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>

<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>

<delete file="${store.dir}/temp_final.jar"/>

</target>

В итоге при компиляции ant package-for-store у нас появится пакет YourProjectName.jar в папке store со всеми сторонними библиотеками. Такой способ напомнил мне статичную линковку в C++..

Всё, теперь мой JAVA проект спокойно запускается в Hadoop кластере. А теперь можно заняться и созданием сайтов 🙂

Связано с категорией: Code Оставить комментарий
Комментарии (0) Пинги (0)

Пока нет комментариев.


Leave a comment

 

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Нет обратных ссылок на эту запись.