为脚本语言设置Maven?
Maven用于构建和管理任何基于Java的项目。但是如果项目使用脚本语言,会发生什么呢 maven现在使用TCL所能做的就是复制周围的文件,并将它们放在目标目录的正确位置 我的问题如下:为脚本语言设置Maven?,maven,tcl,pom.xml,jacl,Maven,Tcl,Pom.xml,Jacl,Maven用于构建和管理任何基于Java的项目。但是如果项目使用脚本语言,会发生什么呢 maven现在使用TCL所能做的就是复制周围的文件,并将它们放在目标目录的正确位置 我的问题如下: 代码位于TCL->需要解释器,而不是编译器 它看不到任何Java代码,所以它不编译任何东西 它没有看到任何Java测试,所以它没有运行它们 没有java可以运行覆盖,因此jococo将没有任何事情可做 有没有办法建立maven来支持TCL项目 我在互联网上搜索了很多,只找到了“jacl”,但我真的不知道如何使用
免责声明:我用TCL编程已经有一段时间了,希望这能有所帮助。TCL与Maven没有紧密集成(与Java不同),因此您需要做更多的工作。要从Maven运行Tcl脚本,最简单的方法是使用,但您必须自己将执行绑定到显式生命周期阶段,而不是依赖默认值。例如,要在
测试
阶段运行脚本(即,要执行tclsh testscript.tcl另一个参数
),可以使用:
<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>
org.codehaus.mojo
execmaven插件
运行tcl测试
测试
执行官
tclsh
testscript.tcl
另一个论点
马文的话太多了!不要忘记,您可能会在父POM中增加很多复杂性,并且您可以使用属性和概要文件来做一些有趣的事情
您还可以使用java
目标来运行Jacl或jTcl解释器(在子进程中)。这取决于您到底想做什么。依赖maven生态系统之外的外部构建工具在很大程度上“不是maven的方式”。如果tclsh不可用,链接到tclsh将中断您的构建。不要说我没有做得更糟(有时候你只是需要把事情做好,忘记“专业的方式”)。幸运的是,还有一种选择-
首先从下载最新(可能是1.4.1)的预构建jacl二进制zip文件
接下来,解压缩并进入lib/tcljava1.4.1子目录。这里有四个jar文件需要发布到本地存储库(或您使用的另一个repo):
您还需要将这些作为依赖项添加到调用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>
从tcl代码(或除零或插件中配置的其他成功代码以外的任何退出值)中删除。希望这会有所帮助。也许您可以从中找到一些答案,因为在maven项目中似乎有TCL测试?这很有趣!但我在TCL中没有看到任何代码,只是在Java中。如果我看错了,请纠正我。不过文件夹结构中
[…]core.tests/rawtests
下的内容似乎是TCL。因此,即使它是Eclipse动态语言工具包的源代码,也可能存在一些问题。然而,我对TCL一无所知,所以不要相信我的话。当我在谷歌上快速搜索这个话题时,我突然跳了起来,我想我应该提一下,因为你说你没有发现任何有用的东西。谢谢马克。但事实上…我被迫使用Maven,真的!这是我工作中的一个项目,我只是试着在本地设置所有东西,这显然是一件痛苦的事情。你也可以制作一个Maven插件来运行Tcl,但这是更多的工作。(如果您愿意,请将其提供给其他人,并在comp.lang.tcl上发布公告…)谢谢,Donal!我试试你的解决办法。如果我没有弄错的话,那只适用于一个文件?或者我可以设置为参数*.tcl,这意味着它可以运行所有的.tcl文件?默认情况下,tcl不会这样做。您需要一个库脚本,该脚本接受所有文件名作为参数,并运行每个文件名。粗略地说,没有错误处理:foreach filename$argv{source$filename}
或者foreach filename$argv{puts[exec[info nameofexecutable]$filename]}
但是我认为你需要在这些方法之外进行调整。你最好就这件事单独问一个问题。
<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>
<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>
package require java
java::call System exit 1