3

Maven は、Java ベースのプロジェクトを構築および管理するためのものです。しかし、プロジェクトがスクリプト言語の場合はどうなるでしょうか?

Maven が TCL でできることは、ファイルをコピーしてターゲット ディレクトリの適切な場所に配置することだけです。

私の問題は次のとおりです。

  1. コードは TCL にあります-> コンパイラではなくインタプリタが必要です。
  2. Java コードは表示されないため、何もコンパイルされません。
  3. Java テストは表示されないため、実行されません。
  4. カバレッジを実行する Java がないため、jococo は何もする必要がありません。

TCL プロジェクトをサポートするために Maven をセットアップする方法はありますか?

私はインターネットでたくさん検索しましたが、「jacl」しか見つかりませんでしたが、Maven のセットアップにどのように使用できるかはよくわかりません。

4

3 に答える 3

3

Tcl は (Java とは異なり) Maven と密接に統合されていないため、さらに作業を行う必要があります。Maven から Tcl スクリプトを実行するには、Exec Maven Pluginを使用するのが最も簡単な方法ですが、デフォルトに依存するのではなく、実行を明示的なライフサイクル フェーズに自分でバインドする必要があります。たとえば、testフェーズ中にスクリプトを実行するには (つまり、 to do tclsh testscript.tcl anotherArgument)、次を使用します。

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>run-tcl-tests</id>
                    <phase>test</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>tclsh</executable>
                        <arguments>
                            <argument>testscript.tcl</argument>
                            <argument>anotherArgument</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

メイヴンは長ったらしい!複雑さの多くを親 POM に入れることができ、プロパティとプロファイルを使用して興味深いことを実行できることを忘れないでください。

ゴールを使用してjavaJacl または jTcl インタープリターを (サブプロセスで) 実行することもできます。それは、正確に何をしたいかによって異なります。

于 2014-01-05T21:49:20.153 に答える
0

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)。それが役立つことを願っています。

于 2014-05-27T14:28:13.497 に答える