私は最近、CLIコマンドのサポートを追加するJavaライブラリを維持するが、私は実際にこのサポートを公開する方法、トラブルの理解を持っています。
どのように私は必要なすべての依存関係で動作します簡単コマンドクロスプラットフォームを提供することができますか?
私自身のテスト中に私はどちらか、私はのIntelliJからやMavenのexecプラグイン上で実行することをJUnitテストに頼ってきました。IntelliJのとMavenはすべての依存関係を管理しますが、私は自分のライブラリーのユーザーが同じことを行うことを期待することはできません。私はWindowsユーザーのための.batファイルおよび提供すると思っていたエイリアスのショートカットとしてLinuxユーザのための、行為を:
java -cp all;the;jars.jar my.package.CliSupportingClass command --option value
より良い方法はありますか?
この記事では、使用して、非常によくそれを説明するappassembler-のMavenプラグイン-すべての依存関係を組み立てるために、スクリプトヘルパーを生成し、Mavenのアセンブリ-プラグインのようなすべてのzipやタールなどのアーカイブとして同梱します。
記事では、私は、最新の3.1.0に更新のプラグインの一つのバージョン2.4を使用しています。私たちのユースケースのための唯一の違いは、ということである<descriptor>
タグが、今でネストされ<descriptors>
たタグ。
標準ビルドのプラグインとして、またはプロファイルの下のいずれかの両方のプラグインが含まれています。
<profiles>
<profile>
<id>standalone-cli</id>
<build>
<plugins>
<!-- appassembler-maven-plugin -->
<!-- maven-assembly-plugin -->
</plugins>
</build>
</profile>
</profiles>
appassembler-のMavenプラグインは、私たちのためにすべての依存関係を収集し、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は、アセンブリ・プラグイン、アーカイブ(複数可)を生成します。
<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>
最後に、スタンドアロン-CLI-descriptor.xmlは、アーカイブに含まれるべきで、何何Mavenのアセンブリ・プラグイン伝えアーカイブの種類を生成する必要があります。
<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>