让groovy脚本像葡萄一样从文件系统中抓取一个jar

让groovy脚本像葡萄一样从文件系统中抓取一个jar,groovy,jar,grape,Groovy,Jar,Grape,Grape在向类路径添加jar时似乎效果相当好。信息技术 还做很多其他事情,比如抓取和依赖关系管理。 e、 g 不幸的是,如果我的文件系统上有一个我想要的jar 动态添加到文件系统,然后我不得不求助于 更丑陋的解决方案 #!/home/robert/bin/groovy def loader = this.class.classLoader.rootLoader loader.addURL(new File("/home/robert/somejars/arithmetic-1.1.jar")

Grape在向类路径添加jar时似乎效果相当好。信息技术 还做很多其他事情,比如抓取和依赖关系管理。 e、 g

不幸的是,如果我的文件系统上有一个我想要的jar 动态添加到文件系统,然后我不得不求助于 更丑陋的解决方案

#!/home/robert/bin/groovy

def loader = this.class.classLoader.rootLoader
loader.addURL(new File("/home/robert/somejars/arithmetic-1.1.jar").toURI().toURL())

// can't use traditional package import
arithmeticMainClass = Class.forName("org.scharp.arithmetic.Main")

println "42 - 23 = " + arithmeticMainClass.subtract(42, 23)

// can't use "new" operator
myArithmeticObject = arithmeticMainClass.newInstance()
有没有办法让grape从文件系统中抓取一个jar?如果没有,, 我能否以某种方式复制grape在groovy/java中所做的工作

我希望此解决方案适用于可由许多用户和许多不兼容的JAR运行的脚本,因此将JAR添加到~/.groovy/lib/等公共目录将不起作用

我可以为本地jar库创建本地maven存储库,但是 这似乎有些过分。

您可以通过创建
~/.groovy/grapeConfig.xml
文件来使用Grape

以下是如何将本地文件系统用作存储库的示例:

<ibiblio name="local" root="file:${user.home}/.m2/repository/" m2compatible="true"/>

没有什么严重的问题。我的猜测是,这不太可能在不久的将来增加。(6-18个月)

我就是这样解决的。 当Grape(Ivy)想要某样东西时,它会将其缓存在
~/.groovy/grapes
目录下。您只需创建自己的ivy.xml文件并将jar放入其中。我通过查看从maven加载的其他工件就知道了。这里有一个小例子

我们在这里使用Oracle,我希望它的JDBCJAR文件能够被我的Groovy脚本“抓取”。 不幸的是,我在网上找不到任何有这个jar的存储库

  • 步骤1:创建目录
    ~/.groovy/grapes/com.oracle
  • 步骤2:创建目录
    ~/.groovy/grapes/com.oracle/ojdbc6
  • 步骤3:创建目录
    ~/.groovy/grapes/com.oracle/ojdbc6/jars
  • 步骤4:获取Oracle的ojdbc jar文件的副本并重命名它。我们的oracle版本是11.2.0.1.0,我们使用Java6,所以我得到了本地安装的ojdbc6.jar文件,并复制为ojdbc6-11.2.0.1.0.jar。我将此文件放入在上一步中创建的目录中
  • 步骤5:创建一个ivy-11.2.0.1.0.xml配置文件。该文件应放在步骤2中创建的目录中。对于这一步,我严重依赖于其他工件的示例。任何apachecommons库都是一个很好的例子
这是我的xml

<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven"
>
  <info organisation="com.oracle" module="ojdbc6" revision="11.2.0.1.0" status="release" publication="20130102153401">
    <license name="" />
    <description homepage="">Oracle ojdbc driver</description>
  </info>
  <configurations>
    <conf name="default" visibility="public" description="" extends="runtime,master" />
    <conf name="master" visibility="public" description="" />
    <conf name="compile" visibility="public" description="" />
    <conf name="provided" visibility="public" description="" />
    <conf name="runtime" visibility="public" description="" extends="compile" />
    <conf name="test" visibility="public" description="" extends="runtime" />
    <conf name="system" visibility="public" description="" />
    <conf name="sources" visibility="public" description="" />
    <conf name="javadoc" visibility="public" description="" />
    <conf name="optional" visibility="public" description="" />
  </configurations>
  <publications>
    <artifact name="ojdbc6" type="jar" ext="jar" conf="master" />
  </publications>
</ivy-module>

为了便于将此grape部署到多台服务器,我创建了一个zip文件,可以在任何地方提取它……

$ unzip -qql oracle_jdbc_groovy_grape.zip
        0  06-11-2012 13:50   .groovy/grapes/com.oracle/
        0  06-12-2012 14:17   .groovy/grapes/com.oracle/ojdbc6/
        0  06-12-2012 14:17   .groovy/grapes/com.oracle/ojdbc6/jars/
  2111220  06-11-2012 11:46   .groovy/grapes/com.oracle/ojdbc6/jars/ojdbc6-11.2.0.1.0.jar
     2349  06-11-2012 11:50   .groovy/grapes/com.oracle/ojdbc6/ivy-11.2.0.1.0.xml
据介绍,Grapes现在还将搜索您当地的Maven回购协议,以及Maven Central

您可以通过以下方式在本地回购中安装任何jar:

  • 在项目中运行
    mvn安装
  • 使用
    mvn依赖:get
    ;看到和
  • 使用
    mvn安装:安装文件
    ;看到和

谢谢您的回复。我提到我不想创建本地maven存储库——我希望能够指定文件系统上的任何jar。抱歉,我没有意识到这一点。从表面上看,葡萄好像完全长在常春藤上。您可能需要实现自己的AST转换才能实现这一点。感谢您提供的源代码链接,但我无法理解:(太糟糕了,grape似乎可以运行(下载并加载一个常春藤罐子),但不能行走(从文件系统加载一个罐子)
@Grapes([
  @GrabConfig(systemClassLoader=true),
  @Grab('com.oracle:ojdbc6:11.2.0.1.0'),
])
import groovy.sql.*
$ unzip -qql oracle_jdbc_groovy_grape.zip
        0  06-11-2012 13:50   .groovy/grapes/com.oracle/
        0  06-12-2012 14:17   .groovy/grapes/com.oracle/ojdbc6/
        0  06-12-2012 14:17   .groovy/grapes/com.oracle/ojdbc6/jars/
  2111220  06-11-2012 11:46   .groovy/grapes/com.oracle/ojdbc6/jars/ojdbc6-11.2.0.1.0.jar
     2349  06-11-2012 11:50   .groovy/grapes/com.oracle/ojdbc6/ivy-11.2.0.1.0.xml