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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно собрать jar через bat файл 
:(
    Опции темы
Kizja
Дата 23.3.2010, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Привет, пытаюсь создать bat файл, чтобы он мне правильно создавал jar файл, но чего-то не получается... Структура проекта такая:

lib/
resources/
     /servlet
          /action
               файлы с ресурсами
src/
     analyzer/
     enums/
     launcher/
     model/
     servlet/
          action/

Надо запаковать все *.class и все файлы из каталога resources/ чтобы в jar получилось:

analyzer/
enums/
launcher/
model/
servlet/
      action/

В архиве должны быть только *.class или файлы ресурсов.

Пробовал делать экспорт из эклипса и всё получается так как надо, если же запускаю свой сприпт, то не выходит:

Код

mkdir classes
javac -encoding UTF8 -classpath lib/javax.servlet.jar;lib/org.mortbay.jetty.jar;lib/commons-logging.jar;lib/stringtemplate.jar;lib/jdom.jar;lib/antlr.jar;resources/servlet/action; -d ./classes ./src/servlet/*.java ./src/servlet/action/*.java ./src/analyzer/*.java ./src/enums/*.java ./src/launcher/*.java ./src/model/*.java
jar cvf intelligent-base.jar classes/ resources/
rmdir /S /Q classes


делает такое:

classes
     все папки, что и выше описаны
resources
     файлы с ресурсами

В результате потом подключаю этот jar в другой проект, но он уже не видит классы из-за того, что всё уложено в classes и resources папки...

Поэтому вопросы:
1) Как изменить этот скрипт, чтобы он собирал правильно ?
2) Можно ли при компиляции файлов не указывать все папки, а написать что-то типа ./src/*, а то такая длинная команда получается с перечислением всех папок... У меня такой вариант сразу выдаёт ошибки, приходится всё указывать явно
3) Можно ли как-то выковырить скрипт, который использует эклипс для создания своего правильного jar файла ? Не хочу привязываться к эклипсу, поэтому нужен скрипт, который запускать...
PM MAIL   Вверх
Dancer
Дата 23.3.2010, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

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



Код

BIN_DIR=classes
RES_DIR=resourses
OUT_JAR=intelligent-base.jar
LIBS=lib/javax.servlet.jar;lib/org.mortbay.jetty.jar;lib/commons-logging.jar;lib/stringtemplate.jar;lib/jdom.jar;lib/antlr.jar;resources/servlet/action
Код



mkdir %BIN_DIR%
javac -encoding UTF8 -classpath  %LIBS% -d ./%BIN_DIR% ./src/servlet/*.java ./src/servlet/action/*.java ./src/analyzer/*.java ./src/enums/*.java ./src/launcher/*.java ./src/model/*.java
cd %BIN_DIR%
jar -cvf  %OUT_JAR%*
cd ..
jar -uvf %OUT_JAR% %RES_DIR%
rmdir /S /Q %BIN_DIR%

а лучше сразу Ant использовать


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
jk1
Дата 23.3.2010, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

а лучше сразу Ant использовать 


Если все равно изучать с нуля, берите Maven. Огромное количество доступных плагинов позволяет делать практически все.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Kizja
Дата 23.3.2010, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dancer, спасибо за ответ, правда твой скрипт, к сожалению, не совсем рабочий - выдаёт ошибки... Плюс как-то не очень логично показалось, что ты в только что созданный jar добавлял ещё ресурсы - на мой взгляд лучше тогда вначале их запихнуть в папку classes, а потом всё это дело в jar засунуть...

Взял твой пример и переделал, получилось такое:

Код

set BIN_DIR=classes
set RES_DIR=resources
set OUT_JAR=intelligent-base.jar
set LIBS=lib/javax.servlet.jar;lib/org.mortbay.jetty.jar;lib/commons-logging.jar;lib/stringtemplate.jar;lib/jdom.jar;lib/antlr.jar;resources/servlet/action

mkdir %BIN_DIR%
XCOPY %RES_DIR% %BIN_DIR% /E
javac -encoding UTF8 -classpath %LIBS% -d ./%BIN_DIR% ./src/servlet/*.java ./src/servlet/action/*.java ./src/analyzer/*.java ./src/enums/*.java ./src/launcher/*.java ./src/model/*.java
cd %BIN_DIR%
jar -cvf  ../%OUT_JAR% *
cd ..
rmdir /S /Q %BIN_DIR%


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

По поводу мавена и анта...

Я знаю, что их удобнее использовать, просто дело в том, что не всегда это удобно, если ты не уверен, что проект будет запускаться на тех компах, где мавен и ант установлены... Ты же не будешь очень обрадован, если вдруг, чтобы перекомпилить проект, тебе придётся их качать, устанавливать и прописывать пути... у меня именно такой случай, поэтому и пишу батнике! Или корявке какой-нибудь послать проект, который про них и не слыхал, не говоря уже о том, что сможет установить, но на батник тыкнуть думаю сможет (хотя с другой стороны корявка и изменить ничего не сможет по этой самой причине, поэтому и компилировать ему нету смысла заново) smile

Это сообщение отредактировал(а) Kizja - 23.3.2010, 12:23
PM MAIL   Вверх
Kizja
Дата 23.3.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Почти получилось сделать, осталась одна проблема, сейчас такой вариант:

Код

set BIN_DIR=classes
set RES_DIR=resources
set OUT_JAR=intelligent-base.jar
set LIBS=lib/javax.servlet.jar;lib/org.mortbay.jetty.jar;lib/commons-logging.jar;lib/stringtemplate.jar;lib/jdom.jar;lib/antlr.jar;resources/servlet/action

mkdir %BIN_DIR%
javac -encoding UTF8 -classpath %LIBS% -d ./%BIN_DIR% ./src/servlet/*.java ./src/servlet/action/*.java ./src/analyzer/*.java ./src/enums/*.java ./src/launcher/*.java ./src/model/*.java
jar -cvf  %OUT_JAR% -C %RES_DIR% . 
rmdir /S /Q %BIN_DIR%


Проблема в этой строчке:
Код

jar -cvf  %OUT_JAR% -C %RES_DIR% . 


Пакует всё правильно, только не пойму как после -С параметра задать несколько директорий, т.е. мне надо, чтобы одновременно были бы оба:

Код

jar -cvf  %OUT_JAR% -C %RES_DIR% . 

и
Код

jar -cvf  %OUT_JAR% -C %BIN_DIR% . 


Но оба в одну чего-то не получается засунуть, пробовал всякие варианты типа:
Код

jar -cvf  %OUT_JAR% -C %RES_DIR%;%BIN_DIR% . 


Кто знает как сделать ?
PM MAIL   Вверх
Kizja
Дата 23.3.2010, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Наверное нельзя несколько директорий здесь задать, поэтому скопирую туда сперва всё таки, а потом запакую:

Код

set BIN_DIR=classes
set RES_DIR=resources
set OUT_JAR=../intelligent-project/lib/intelligent-base.jar
set LIBS=lib/javax.servlet.jar;lib/org.mortbay.jetty.jar;lib/commons-logging.jar;lib/stringtemplate.jar;lib/jdom.jar;lib/antlr.jar;resources/servlet/action

mkdir %BIN_DIR%
XCOPY %RES_DIR% %BIN_DIR% /E
javac -encoding UTF8 -classpath %LIBS% -d ./%BIN_DIR% ./src/servlet/*.java ./src/servlet/action/*.java ./src/analyzer/*.java ./src/enums/*.java ./src/launcher/*.java ./src/model/*.java
jar -cvf  %OUT_JAR% -C %BIN_DIR% .
rmdir /S /Q %BIN_DIR%


Надоело возиться - мелкая проблема, а времени отнимает много...
PM MAIL   Вверх
LSD
Дата 23.3.2010, 19:13 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Kizja @  23.3.2010,  17:23 Найти цитируемый пост)
Надоело возиться - мелкая проблема, а времени отнимает много... 

Ну так а ты как думал, для чего придумали Ant и Maven smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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