Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为脚本语言设置Maven?_Maven_Tcl_Pom.xml_Jacl - Fatal编程技术网

为脚本语言设置Maven?

为脚本语言设置Maven?,maven,tcl,pom.xml,jacl,Maven,Tcl,Pom.xml,Jacl,Maven用于构建和管理任何基于Java的项目。但是如果项目使用脚本语言,会发生什么呢 maven现在使用TCL所能做的就是复制周围的文件,并将它们放在目标目录的正确位置 我的问题如下: 代码位于TCL->需要解释器,而不是编译器 它看不到任何Java代码,所以它不编译任何东西 它没有看到任何Java测试,所以它没有运行它们 没有java可以运行覆盖,因此jococo将没有任何事情可做 有没有办法建立maven来支持TCL项目 我在互联网上搜索了很多,只找到了“jacl”,但我真的不知道如何使用

Maven用于构建和管理任何基于Java的项目。但是如果项目使用脚本语言,会发生什么呢

maven现在使用TCL所能做的就是复制周围的文件,并将它们放在目标目录的正确位置

我的问题如下:

  • 代码位于TCL->需要解释器,而不是编译器
  • 它看不到任何Java代码,所以它不编译任何东西
  • 它没有看到任何Java测试,所以它没有运行它们
  • 没有java可以运行覆盖,因此jococo将没有任何事情可做
  • 有没有办法建立maven来支持TCL项目

    我在互联网上搜索了很多,只找到了“jacl”,但我真的不知道如何使用它来设置Maven。

    除非你使用它,否则我不知道Maven会做什么,除了让构建过程复杂化。除非您很了解Maven,并且能够开发一些支持插件。正如您所指出的,TCL是一种脚本语言,这意味着您真正的挑战是运行时部署问题

    那么,TCL构建过程如何简化部署?我建议为每个目标环境构建RPM、Debian或MSI包。这些本机安装程序可以使用依赖关系管理来确保也安装了TCL Interprer。另一个有用的构建选项是,它将TCL解释器捆绑在一个文件中

    构建后,这些二进制文件可以存储在Maven存储库中(如jar文件),并作为部署过程的一部分使用。最后,不要忘记,您不会被迫使用Maven作为构建工具


    免责声明:我用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