Как использовать 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, чтобы предотвратить будущий ад зависимостей.

Другие вопросы по тегам