Mavenエコシステム外の外部ビルドツールに依存することは、「Mavenの方法ではありません」。tclsh が利用できない場合、tclsh にリンクするとビルドが壊れます。私が悪いことをしていないと言っているわけではありません(時には、それをやり遂げて「熟練した方法」を忘れなければならないこともあります). 幸いなことに、代わりのjaclがあります。
最初に、 sourceforgeから最新 (おそらく 1.4.1) のビルド済み jacl バイナリ zip ファイルをダウンロードします。
次に、解凍して lib/tcljava1.4.1 サブディレクトリに移動します。ここには、ローカル リポジトリ (または使用する別のリポジトリ) に公開する必要がある 4 つの jar ファイルがあります。
mvn install:install-file -Dfile=tjc.jar -DgroupId=jacl -DartifactId=tjc -Dversion=1.4.1 -Dpackaging=jar
mvn install:install-file -Dfile=tcljava.jar -DgroupId=jacl -DartifactId=tcljava -Dversion=1.4.1 -Dpackaging=jar
mvn install:install-file -Dfile=jacl.jar -DgroupId=jacl -DartifactId=jacl -Dversion=1.4.1 -Dpackaging=jar
mvn install:install-file -Dfile=itcl.jar -DgroupId=jacl -DartifactId=itcl -Dversion=1.4.1 -Dpackaging=jar
また、これらを依存関係として、tcl スクリプトを呼び出しているプロジェクトに追加する必要があります。
<dependency>
<groupId>jacl</groupId>
<artifactId>itcl</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>jacl</groupId>
<artifactId>jacl</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>jacl</groupId>
<artifactId>tcljava</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>jacl</groupId>
<artifactId>tjc</artifactId>
<version>1.4.1</version>
</dependency>
次に、exec-maven-plugin のexecゴールを使用して tcl (または実際には jacl) スクリプトを呼び出し、スクリプト ファイル パスを最初の引数として渡します (必要に応じて実行をカスタマイズして、適切なフェーズにバインドするなど)。
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>runTcl</id>
<phase>process-resources</phase>
<goals><goal>exec</goal></goals>
<configuration>
<executable>java</executable>
<arguments>
<argument>-Dbasedir=${basedir}</argument>
<argument>-classpath</argument>
<classpath/>
<argument>tcl.lang.Shell</argument>
<argument>${basedir}/src/main/scripts/myScript.tcl</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
更新: java ゴールの代わりに上記の「exec」ゴールを使用しなければならなかったことに注意してください。これは、jacl がそのメイン関数で System.exit() を呼び出し、jvm を強制終了するためです。この構成では、次を使用してビルドを失敗させることができます。
package require java
java::call System exit 1
Tcl コード内から (またはゼロ以外の終了値またはプラグインで構成された他の successCodes)。それが役立つことを願っています。