【问题标题】:JVM-based scripting language with Maven dependency resolution具有 Maven 依赖解析的基于 JVM 的脚本语言
【发布时间】:2012-08-23 17:18:42
【问题描述】:

我正在寻找一种简单的方法来编写调用 jar 文件的简短 shell 脚本。 必须为运行时类路径跟踪(并安装)所有这些 jar 文件,这在一定程度上违背了使用脚本的目的(与在 Eclipse 中构建可运行的 jar 文件相反)。我希望 Maven(或类似的东西)来管理这个。

图片:

 #!/usr/bin/the-cool-shell

 use org.apache.commons/lang/3.0.0
 use org.json/json

 import org.json.*;

 new JSONObject("{}");

这应该会自动从 Maven 获取所需的工件(第一次下载后开销基本上为零)。

我有什么选择?

【问题讨论】:

    标签: shell maven scripting classpath dependency-management


    【解决方案1】:

    如果您使用的是 Groovy 和 Groovy Shell,则可以使用 Grape 基础架构。

    #!/usr/bin/env groovy
    
    @Grab( 'log4j:log4j:1.2.14' )
    import org.apache.log4j.Level
    import org.apache.log4j.Logger
    
    def logger = Logger.getLogger(GroovyShell.class)
    Logger.rootLogger.level = Level.INFO
    
    logger.info 'I am using the Log4j library by using Grape'
    

    至于您的确切示例,这将起作用:

    #!/usr/bin/env groovy
    
    @Grapes([
        @Grab('org.apache.commons:commons-lang3:3.0'),
        @Grab('org.json:json:20090211')
        ])
    import org.json.*
    
    new JSONObject('{}')
    

    在这种情况下,我使用的是 Groovy 语法,但普通的 Java 语法也可以。


    取自@Grapes注解的Javadoc:

    有时我们每个班级需要不止一个抓取,但我们只能添加 每个可注释节点一种注释类型。这个类允许多个 要添加的抓取。

    【讨论】:

    • 看起来很整洁。这是 Groovy 的一部分,还是我需要安装其他东西?
    • 不只是在某个目录(例如/opt/groovy)中安装Groovy,确保bin 目录在您的路径中,然后运行groovy json.groovy 例如。
    • @Grapes 注释是否可以解决无法拥有多个 @Grab 的问题?
    【解决方案2】:

    您可以尝试Gradle,它是一个构建管理工具,但它使用 Groovy 构建脚本,并且使用 Maven 依赖模型。所以你的脚本可能是一个 Gradle 的“构建”脚本,它只是做了一些不同于构建软件的事情。

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2011-04-09
      • 1970-01-01
      • 2012-07-21
      • 2013-04-05
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多