Я добавил поддержку CLI для своей библиотеки Java, как я могу удобно представить ее пользователям моей библиотеки? - PullRequest
0 голосов
/ 04 декабря 2018

Я поддерживаю библиотеку Java, которая недавно добавила поддержку команд CLI, но у меня возникают проблемы с пониманием того, как на самом деле представить эту поддержку.

Как я могу предоставить кроссплатформенную команду, которая работает со всеминеобходимые зависимости?

Во время моего собственного тестирования я полагался либо на тесты Junit, которые я запускаю из IntelliJ, либо на подключаемый модуль Maven exec.IntelliJ и Maven управляют всеми зависимостями, но я не могу ожидать, что пользователи моей библиотеки сделают то же самое.Я подумываю о предоставлении файла .bat для пользователей Windows и псевдоним для пользователей Linux, которые действуют как ярлык для:

java -cp all;the;jars.jar my.package.CliSupportingClass command --option value

Есть лилучший способ?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Эта статья объясняет это довольно хорошо, используя appassembler-maven-plugin для сборки всех зависимостей и создания помощника сценария и maven-assembly-plugin чтобы объединить все это в архив, такой как zip и tar.

В статье используется версия 2.4 одного из плагинов, которую я обновил до последней версии 3.1.0.Единственное отличие для нашего варианта использования состоит в том, что тег <descriptor> теперь вложен в тег <descriptors>.

Включите оба плагина либо в виде стандартных плагинов сборки, либо в профиль:

<profiles>
    <profile>
        <id>standalone-cli</id>
        <build>
            <plugins>
                <!-- appassembler-maven-plugin -->
                <!-- maven-assembly-plugin -->
            </plugins>
        </build>
    </profile>
</profiles>

appassembler-maven-plugin собирает все зависимости для нас и создает вспомогательный скрипт для windows и unix:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>appassembler-maven-plugin</artifactId>
    <version>1.8.1</version>
    <configuration>
        <repositoryLayout>flat</repositoryLayout>
        <repositoryName>lib</repositoryName>
        <showConsoleWindow>true</showConsoleWindow>
        <platforms>
            <platform>unix</platform>
            <platform>windows</platform>
        </platforms>
        <programs>
            <program>
                <mainClass>org.simplejavamail.cli.SimpleJavaMail</mainClass>
                <id>sjm</id>
            </program>
        </programs>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>assemble</goal>
            </goals>
        </execution>
    </executions>
</plugin>

maven-assembly-plugin затем создает архив (ы):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <descriptors>
            <descriptor>src/assembly/standalone-cli-descriptor.xml</descriptor>
        </descriptors>
    </configuration>
    <executions>
        <execution>
            <id>assemble-all</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Наконец standalone-cli-descriptor.xml сообщает maven-assembly-plugin, что следует включить в архивы и какой тип архивов должно быть выпущено:

<assembly
        xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>standalone-cli</id>
    <formats>
        <format>tar</format>
        <format>zip</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>LICENSE-2.0.txt</include>
                <include>NOTICE.txt</include>
                <include>RELEASE.txt</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/appassembler</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>**/**</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
0 голосов
/ 05 декабря 2018

Gradle имеет плагин application , который создает ZIP-файл дистрибутива.Ваши пользователи могут разархивировать это, чтобы установить его.Он имеет все зависимости в папке lib и файлах Windows bat и сценариях оболочки * nix для запуска приложения в папке bin.

Я полагаю, что у Мейвена есть нечто подобное.

...