Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ant: Исполняемый jar файл с внешними библиотеками 
V
    Опции темы
Anyone
Дата 13.12.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



В проекте используются внешние библиотеки, а также dll-ки.
С помощью Ant создаю исполняемый jar-файл, который требует наличие папки с библиотеками, все хорошо работает.
Но нужно включить библиотеки в исполняемый jar-файл.

Мой build.xml:
Код

<?xml version="1.0" encoding="UTF-8"?>
<project name="Sms2AllDownloader" default="build" basedir=".">
    <property name="name" value="Sms2AllDownloader"/>
    <property name="src.dir" location="${basedir}/src"/>
    <property name="lib.dir" location="${basedir}/lib"/>
    <property name="build" location="${basedir}/build"/>
    <property name="build.classes" location="${build}/classes"/>
    <property name="manifest.main.class" value="Sms2All.MainForm"/>
    <path id="build.classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>
    
    <!-- convert classpath to a flat list/string for use in manifest task -->
    <pathconvert property="mf.classpath" pathsep=" ">
        <path refid="build.classpath" />
        <flattenmapper />
    </pathconvert>
    
    <manifest file="MANIFEST.MF">
        <!-- <attribute name="Built-By" value="${manifest.built.by}"/> -->
        <!-- <attribute name="Created-By" value="${manifest.created.by}"/> -->
        <attribute name="Main-Class" value="${manifest.main.class}"/>
        <!-- <attribute name="Implementation-Version" value="${version.number}-b${build.number}"/> -->
        <!-- <attribute name="Built-Date" value="${TODAY}"/> -->
        <attribute name="Class-Path" value="${mf.classpath}" />
    </manifest>
    
    <!--
    <manifestclasspath property="lib.list" jarfile="${build}/${name}.jar">
        <classpath refid="libs.dir"/>
    </manifestclasspath>
    -->
    
    <!-- Сборка приложения -->
    <target name="build" depends="clean" description="Builds the application">
        <!-- Создание директорий -->
        <mkdir dir="${build.classes}"/>
 
        <!-- Компиляция исходных файлов -->
        <javac srcdir="${src.dir}"
               destdir="${build.classes}"
               debug="false"
               deprecation="true"
               optimize="true" >
            <classpath refid="build.classpath"/>
        </javac>
 
        <!-- Копирование необходимых файлов -->
        <copy todir="${build.classes}">
            <fileset dir="${src.dir}" includes="**/*.*" excludes="**/*.java"/>
        </copy>
        <copy todir="${build}">
            <fileset dir="${basedir}" includes="*.dll"/>
        </copy>
 
        <!-- Создание JAR-файла -->
        <jar jarfile="${build}/${name}.jar" manifest="MANIFEST.MF">
            <fileset dir="${build.classes}"/>
            <fileset dir="${lib.dir}" includes="**.jar"/>
        </jar>
    </target>
 
    <!-- Очистка -->
    <target name="clean" description="Removes all temporary files">
        <!-- Удаление файлов -->
        <delete dir="${build.classes}"/>
    </target>
</project>

 

Но при попытки выполнить jar-файл получаю эксепшн из которого можно понять, что библиотеки не видны:

Цитата

Exception in thread "main" java.lang.NoClassDefFoundError: com/melloware/jintell
itype/HotkeyListener
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.melloware.jintellitype.HotkeyLi
stener
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 12 more
Could not find the main class: Sms2All.MainForm. Program will exit.


Распаковал jar-файл - все библиотеки есть, в манифесте они прописаны в разделе class-path.
Содержимое манифеста:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_21-b07 (Sun Microsystems Inc.)
Main-Class: Sms2All.MainForm
Class-Path: commons-logging-1.1.1.jar jdic.jar jdic_native_applet.jar 
 jdic_stub_unix.jar jdic_stub_windows.jar jintellitype-1.3.1.jar jdic_
 native.jar jdic_native.jar jdic_native.jar jdic_native.jar

В чем может быть проблема?

Спасибо за внимание.

PM MAIL   Вверх
powerOn
Дата 13.12.2010, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 28
Всего: 159



Цитата(Anyone @  13.12.2010,  00:19 Найти цитируемый пост)
Распаковал jar-файл - все библиотеки есть, в манифесте они прописаны в разделе class-path.


Библиотеки в jar файл не упаковывают, они должны лежать вне и подключаться при запуске к classpath.



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Anyone
Дата 13.12.2010, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Цитата(powerOn @  13.12.2010,  01:20 Найти цитируемый пост)

Библиотеки в jar файл не упаковывают, они должны лежать вне и подключаться при запуске к classpath.

Но я читал статьи где описано как это сделать, именно так и сделал, или я что-то не правильно понял?  smile 
PM MAIL   Вверх
Anyone
Дата 13.12.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Цитата(powerOn @  13.12.2010,  01:20 Найти цитируемый пост)
Библиотеки в jar файл не упаковывают, они должны лежать вне и подключаться при запуске к classpath.

Так работает, спасибо.
Можно ли все запаковать в один jar-файл?
PM MAIL   Вверх
Anyone
Дата 13.12.2010, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Подскажите, пожалуйста, как нужно определить pathconvert, чтобы строка включала путь к библиотекам, то есть вместо этого:

 commons-logging-1.1.1.jar jdic.jar jdic_native_applet.jar 
 jdic_stub_unix.jar jdic_stub_windows.jar jintellitype-1.3.1.jar jdic_
 native.jar jdic_native.jar jdic_native.jar jdic_native.jar

получить:

lib/commons-logging-1.1.1.jar lib/jdic.jar lib/jdic_native_applet.jar  и тд.

Спасибо.
PM MAIL   Вверх
Anyone
Дата 13.12.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Нашел способ:
Код

    <pathconvert property="mf.classpath" pathsep=" ">
        <path refid="build.classpath" />
        <!-- <mapper type="flatten" />  -->
    <chainedmapper>
        <flattenmapper/>
        <globmapper from="*" to="lib/*"/>
    </chainedmapper>

PM MAIL   Вверх
Anyone
Дата 13.12.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Остался один нерешенный вопрос.
В проекте используются ресурсы (картинки), я запаковываю их в jar - файл.
Как к ним доступиться, или нужно поступить как и с библиотеками - скопировать в текущий каталог?
PM MAIL   Вверх
Anyone
Дата 13.12.2010, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Цитата(Anyone @  13.12.2010,  13:47 Найти цитируемый пост)
В проекте используются ресурсы (картинки), я запаковываю их в jar - файл.
Как к ним доступиться

Решил задачу такими 2мя способами:
Код

imageRun=ImageIO.read(this.getClass().getClassLoader().getResourceAsStream("Sms2All/Resources/run_exc_original.gif"));

imageProgress=ImageIO.read(this.getClass().getClassLoader().getResource("Sms2All/Resources/progress.gif"));
            
trayIcon = new TrayIcon(imageRun, "Sms2AllDwnloader");



Но почему-то иконка в трее не анимированная, а если прописать полный путь к незапакованной картинке - все нормально.

Как можно решить проблему?

Это сообщение отредактировал(а) Anyone - 13.12.2010, 16:52
PM MAIL   Вверх
Anyone
Дата 13.12.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 1.6.2008

Репутация: нет
Всего: нет



Всем спасибо, вот решение:
Код

            imageRun=Toolkit.getDefaultToolkit().getImage(
                this.getClass().getClassLoader().getResource("Sms2All/Resources/run_exc_original.gif"));
            imageProgress=Toolkit.getDefaultToolkit().getImage(
                this.getClass().getClassLoader().getResource("Sms2All/Resources/progress.gif"));


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.