Как использовать jarjar из командной строки?
У меня проблемы с использованием jarjar из командной строки для объединения простой программы Scala с библиотекой времени выполнения scala.
jarjar правильно определяет зависимость:
$ java -jar ~/Desktop/saug/jarjar-1.0.jar find jar BCT.jar scala-library.jar
/home/schani/Work/scala/bct/BCT.jar -> /home/schani/Work/scala/bct/scala-library.jar
Однако их объединение не работает:
$ CLASSPATH=./scala-library.jar java -jar ~/Desktop/saug/jarjar-1.0.jar process rules.jjl BCT.jar BCTS.jar
Файл jar, который я получаю, по-прежнему зависит от scala-library.jar. Независимо от того, добавлю я переменную CLASSPATH или нет, не имеет значения. Мой файл rules.jjl выглядит так:
keep BCT
Что делать?
3 ответа
Использование опции java "-jar" игнорирует путь к классу. Попробуйте указать основной класс явно с помощью classpath и пропустите "-jar":
java -cp ~/Desktop/saug/jarjar-1.0.jar:./scala-library.jar com.tonicsystems.jarjar.Main process rules.jjl BCT.jar BCTS.jar
Попробуйте добавить хранилище для класса scala.runtime.Nothing$. Я нашел это необходимым при использовании аналогичного продукта (autojar; http://autojar.sourceforge.net/en_d/index.html) с Scala.
jarjar не упаковывает другие банки в вашу банку. Он переименовывает только зависимости внутри одного jar-файла.
Используйте метод, изложенный здесь Чистый способ объединить несколько банок? Желательно использовать Ant, чтобы заново собрать все зависимые банки в ваш jar, а затем запустить jarjar, чтобы предотвратить будущий ад зависимостей.