Как связать jar-пакеты с файлами *.java во время компиляции с использованием GCJ?
У меня есть следующие файлы:
A.jar (содержит файлы *.class)
B.jar (содержит файлы *.class)
Program.java (содержит класс Program с функцией main, зависящей от A.jar и B.jar)
Как я могу создать исполняемый файл программы с использованием GCJ?
2 ответа
Это работает для меня:
gcj -c A.jar -o Ao
gcj -c B.jar -o Bo
gcj --main = Программа --classpath=A.jar:B.jar -o Программа Ao Bo Program.java
Прошло много времени с тех пор, как я поигрался с Java, поэтому следующее в основном не в моей голове.
В Linux обычно Java-программа запускается скриптом-оберткой. Для вашего случая этот скрипт-обертка может быть Program
, содержимое:
#!/bin/sh
java -cp A.jar:B.jar:/path/to/dir/where/Program.class/is/in Program
Если вы предпочитаете иметь только один файл jar, то вы можете "разархивировать" A.jar и B.jar и создать новый jar, например Program.jar, который содержит все классы из A.jar, B.jar и вашей Программы.class, и вы создаете небольшой файл манифеста, который сообщает, какой класс должен быть запущен при запуске файла jar (в данном случае это ваш Program.class).
Содержимое файла манифеста (назовем его manifest.txt):
-----8<------
Main-Class: Program
----->8------
Обратите внимание на пустую строку после строки "Main-Class: Program" - это необходимо.
Таким образом, создать сингл Program.jar
:
gcj --classpath A.jar:B.jar Program.java
mkdir tmp
cd tmp
jar xf ../A.jar
jar xf ../B.jar
cp ../Program.class .
jar cmf ../manifest.txt ../Program.jar .
cd ..
Теперь создайте оболочку сценария оболочки Program
:
#!/bin/sh
java -jar /path/to/Program.jar
Сделайте его исполняемым:
chmod +x Program
и запустить его:
./Program
Аплодисменты, если это работает, иначе бросайте гнилые помидоры!