LINUX.ORG.RU

Javapackager

 , , ,


2

1

Ребят, кто в курсе, как этим правильно пользоваться? Может мне кто-нибудь показать, как в native для всех платформ собрать какой-нибудь простейший Hello world, в консоли (со системами сборки и сам разберусь).

javapackager - это бывший Javafxpackager, поэтому в тегах и указал javafx.

Мне нужно просто опакетировать так, чтобы у препода на оффтопике запустилось без проблем, вне зависимости от наличия у него JVM (точнее в кабинетах то у нас есть JVM 7, но мало ли где он будет смотреть).

Напишите сборку однофайлового проекта, либо ткните в консольную документацию (я что-то найти не смог пока).

Deleted

А что конкретно вас смущает? Вот тестирую на 8-ке, сначала MainClass

import java.util.*;
import java.lang.*;
import java.io.*;


class MainClass 
{
	public static void main (String[] args) throws java.lang.Exception {
		System.out.println("test");
	}
}
Компилим. Делаем jar
javapackager -createjar -appclass MainClass -srcdir classes -outdir out -outfile outjar -v
Тестируем на всякий
java -jar classes/MainClass.jar
test
Делаем сборку с -native без указания типа (будет выбран all под вашу платформу)
javapackager -deploy -native -outdir out/ -outfile test -srcdir classes/ -srcfiles MainClass.jar -appclass MainClass -name "test" -title "test"
Ждем в зависимости от платформы...
No base JDK. Package will use system JRE.
No base JDK. Package will use system JRE.
Creating app bundle: /home/snaik/test/out/bundles/test
Debian packages should specify a license.  The absence of a license will cause some linux distributions to complain about the quality of the application.
Package (.deb) saved to: /home/snaik/test/out/bundles/test-1.0.deb
Все окей. Проверяем
Package (.rpm) saved to: /home/snaik/test/out/bundles
cd out/bundles/ && ls -a
.  ..  MainClass.jar  test  test-1.0-1.x86_64.rpm  test-1.0.deb  test.html  test.jnlp
Profit? Все на месте внутри пакетов, правда сами пакеты довольно жирные выходят для 8-ки у меня
ls -alh
-rw-rw-r-- 1 snaik snaik  68M февр. 13 04:43 test-1.0-1.x86_64.rpm
-rw-r--r-- 1 snaik snaik  47M февр. 13 04:43 test-1.0.deb
Но думаю это не беда, если вам нужна переносимость. Под винду и os x не могу, к сожалению, сейчас протестировать. Но думаю проблем не возникнет. Вы главное используйте офф. доки javapackager, и отписывайте если что-то пойдет не так.

znenyegvkby
()
Ответ на: комментарий от znenyegvkby

Спасибо огромное. Просто я нашёл привязку через WiX и Inno installer для Netbeans. Пытался сконфигурировать идею под это (у меня ультимейт версия, если что) и не осилил. У меня кривовато собиралось

Deleted
()
Ответ на: комментарий от znenyegvkby

Хотя что-то уже пошло иначе.

>tree /F .
Структура папок
Серийный номер тома: 0EC3-DD83
C:\USERS\MERHALAK\DOCUMENTS\TEST
│   log1.txt
│   
└───classes
        Main.java
>type classes\Main.java
public class Main {
	public static void main(String[] args) {
		System.out.println("Hello, world");
	}
}
>javapackager -createjar -appclass Main -srcdir classes -outdir classes -outfile Main -v
>tree /F .
Структура папок
Серийный номер тома: 0EC3-DD83
C:\USERS\MERHALAK\DOCUMENTS\TEST
│   log1.txt
│   log2.txt
│
└───classes
        Main.jar
        Main.java
>java -jar classes\Main.jar
Error: Could not find or load main class Main
Странно, это я повторяю 2-ой раз одно и то же действие. Причем первый раз вроде сработало.

Upd: разобрался, нужно было ещё javac вызвать для Main.java, перед тем, как собирать jar. Он без .class не мог.

Deleted
()
Последнее исправление: merhalak (всего исправлений: 3)
Ответ на: комментарий от znenyegvkby
>java -jar classes\Main.jar
Hello, world

Хотя jar работает, дальнейшая сборка превращается непонятно во что:

>javapackager -deploy -native -outdir out -outfile test -srcdir classes -srcfiles Main.jar -appclass Main -name "test" -title "test"
No base JDK. Package will use system JRE.
No base JDK. Package will use system JRE.
Creating app bundle: test in C:\Users\merhalak\Documents\test\out\bundles
Result application bundle: C:\Users\merhalak\Documents\test\out\bundles
Detected [iscc.exe] version 0 but version 5 is required.
Bundler EXE Installer skipped because of a configuration problem: Can not find Inno Setup Compiler (iscc.exe).  
Advice to fix:   Download Inno Setup 5 or later from http://www.jrsoftware.org and add it to the PATH.
Bundler MSI Installer skipped because of a configuration problem: Can not find WiX tools (light.exe, candle.exe).  
Advice to fix:   Download WiX 3.0 or later from http://wix.sf.net and add it to the PATH.
И при запуске ничего не выводится:
C:\Users\merhalak\Documents\test>out\bundles\test\test.exe

C:\Users\merhalak\Documents\test>

Deleted
()
Ответ на: комментарий от znenyegvkby

Эта шняга собрала мне test.exe и test-1.0.exe.

Второе - инсталлятор.

Только всё равно установленная программа не хочет выводить мне на консоль ничего.

Deleted
()
Ответ на: комментарий от znenyegvkby

В общем, javapackager в винде не умеет в консоль. Я сделал простейший GUI на Swing и всё заработало.

Спасибо за помощь.

И да: для деплоя на винду нужен Inno Setup. Или WiX. Чтобы сделать инсталлятор. Впрочем, javapackager и без них собирает приложение. Правда, с запуском через javaw похоже, посему вывода в консоль нет.

Deleted
()
Ответ на: комментарий от Deleted

Что-то я все проспал видимо? :)

Правда, с запуском через javaw похоже, посему вывода в консоль нет.

Вы правы, вы же собираете с jar, а jar на винде, ЕМНИП, ассоциируется автоматом с javaw который при запуске консоль конечно же не откроет. Если нужна консоль, просто напишите мини-батник, который сам запустит конкретно через java приложение. И все будет работать.

znenyegvkby
()
Ответ на: комментарий от Deleted

И да: для деплоя на винду нужен Inno Setup. Или WiX. Чтобы сделать инсталлятор.

А вот по поводу installer-ов под винду уже не смогу вас сориентировать. Если честно я в винде вообще нуб, поэтому тут нужен кто-то знающий.

znenyegvkby
()

Вы уверены что препод захочет запускать инсталятор какой то глупости?

Я бы не запускал, и послал с такой программой куда подальше.

Может проще поставлять с jre?

anonymous
()
Ответ на: комментарий от znenyegvkby

Сам jar при запуске через java -jar всё пишет.

Или ты имеешь в виду ассоциации по умолчанию?

Deleted
()
Последнее исправление: merhalak (всего исправлений: 1)
Ответ на: комментарий от znenyegvkby

Он успешно собрал, даже установился в %APPDATA% и удалился чисто.

Deleted
()
Ответ на: комментарий от znenyegvkby

А почему собранный исполняемый файл так быстро запускается, если все равно нужно загрузить толстый рантайм в память?

➜  test  time ./test 
test
./test  0,06s user 0,01s system 105% cpu 0,072 total

f1xmAn ★★★★★
()
Ответ на: комментарий от f1xmAn

Очевидно, кэш. Я освобождаю кэш рамы

sudo /bin/bas
sync && echo 3 > /proc/sys/vm/drop_caches
И получаю full-load
time ./test 
test
real	0m1.313s
user	0m0.066s
sys	0m0.050s
На все последующие запросы у меня показатели примерно равные вашим (немного жирнее, но тут дело просто в машинах, у меня слабенькие железяки)
time ./test 
test
real	0m0.084s
user	0m0.066s
sys	0m0.012s

znenyegvkby
()
Ответ на: комментарий от znenyegvkby

Я тоже сначала подумал, что кеш, но после перезагрузки время (в
тот раз уже на глаз) не изменилось.

f1xmAn ★★★★★
()
Ответ на: комментарий от f1xmAn

Хм, тогда не знаю. Можно только гадать. Может это гибернация была и рама восстановилась из свопа, а может быть какие-то данные дергаются из домашнего окружения (~/.java/deployment/cache/ или как там для вашей системы), и т.д. и т.п. Ситуации разные могут быть. А может вы запускаете из-под инопланетного кластера? :) Шутка.

(в тот раз уже на глаз)

Надо провести замеры, я сходу не могу сказать, но вот у меня, даже на моем относительно дохленьком железе, бывает и после включения рантайм подгружается намного шустрее обычного (раньше замерял, максимально помню 0.65s ловил, но это все были хелловорды для тестов конечно же). Поэтому если на глаз смотреть вполне реально «проморгать» пол секунды. 8-ка пошустрее работает у меня, но все равно чистый завод не должен оставаться незамеченным, особенно если проект добротно тянет за собой. Может быть у вас реально мощная машина просто? Покажите на чистом заводе время, пожалуйста.

znenyegvkby
()
Ответ на: комментарий от znenyegvkby
➜  test  sync && echo 3 > /proc/sys/vm/drop_caches
➜  test  time ./test 
test
./test  0,06s user 0,03s system 53% cpu 0,164 total
➜  test  time ./test
test
./test  0,06s user 0,00s system 99% cpu 0,064 total


Запускаю на Thinkpad T430 (i5-3320M, 16gb ram, ssd). Есть подозрение, что это из-за ssd :)

f1xmAn ★★★★★
()
Ответ на: комментарий от f1xmAn

Ну по сравнению с моими тормозными 4-мя intel-ками по 1.6, 2-мя рамами по 2Gb, и h-sata2 WD-250Gb, твоя машина реально инопланетным кластером выглядит :) Это еще без учета того, что на время тестов что я скинул выше, у меня все было забито пере-индексацией документов на ES. Но все равно, даже лучшеий результат 0.65s у меня против 0.06s это что-то нереальное.
Что за ось?

0,06s user 0,03s system

Это же стандартный UNIX-вый time? Это точно real-time, а не user-CPU время или system-CPU?

znenyegvkby
()
Ответ на: комментарий от f1xmAn
./test  0,06s user 0,03s system 53% cpu 0,164 total
./test  0,06s user 0,00s system 99% cpu 0,064 total

Тьфу, я слепой, я просто к формату наоборот привык, что real идет вначале, а тут в конце.

0,164 total
0,064 total

Вполне допускаю тогда что с твоими характеристиками за 0.1s она может уложиться, раз на моем мамонте она лучший за 0.6 давала. Да еще SSD.

znenyegvkby
()
Ответ на: комментарий от f1xmAn

Вы про Modular source code? Если так, то поскорей бы. Сколько веревочке не виться, все равно совьется в модульную структуру. Давно пора было.

znenyegvkby
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.