Как я могу указать путь к классам для исполняемых файлов, созданных с помощью 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,

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