Как я могу указать путь к классам для исполняемых файлов, созданных с помощью javapackager?
javapackager
Команда в Java 8 способна создавать автономные исполняемые файлы. В примерах в Интернете обычно используется только один файл JAR, но у меня есть несколько файлов JAR, которые необходимо встроить в приложение. В документации говорится, что можно сообщить бандлеру, что отправляется classpath classPath=path
сквозь -B
вариант. Однако в результате <applicationname>.cfg
файл внутри упакованного приложения есть строка, которая говорит
app.classpath=
на который совершенно не влияет аргумент classPath, но я должен вручную отредактировать его, чтобы включить все фляги, используемые приложением для его работы.
Все это на macOS, я не мог попробовать это на другой платформе.
Любое понимание высоко ценится - например, рабочий пример, использующий более одной банки.
2 ответа
Документация слегка испорчена: -Bclasspath=
работает (проверено на Windows и MacOS)
У меня есть эта проблема, и я нашел альтернативное решение, которое не требует изменения пути к классам файла cfg. Мой подход использует Maven, но это может быть сделано с помощью Ant или сценариев; просто требует больше работы. Идея состоит в том, чтобы создать один файл jar, содержащий все содержимое вашего основного jar и все зависимые jar. Это можно сделать с помощью одного плагина Maven, например:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.yourapp.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Я установил фазу выполнения на prepare-package
так что он запускается до объединения приложений, но вы можете изменить его при необходимости. Конечный результат - одна банка с именем <appName>-<version>-jar-with-dependencies.jar
который содержит извлеченное содержимое всех зависимых банок. Вы можете проверить это используя java -jar <jarName>
перед использованием с javapackager
,