2017-10-31 12 views
1

私は単純なGroovyスクリプトで "HTTPBuilder"を使用しようとしています。私が '@Grab'を使って依存関係をインポートすると、すべて正常に動作します。しかし、私は別のディレクトリ内にjarファイルを保存し、classLoader関数を使用してそれをインポートしたいと思います。私はブドウディレクトリに配置された 'http-builder-0.7.jar'をコピーし、Groovyスクリプトが実行されているディレクトリ(Windows上)に貼り付けました。私はその後、「@Grab」ステートメントをコメントアウトし、クラスローダが含まれていますが、このエラーを取得:GroovyでのローカルJarの組み込み

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: C:\Groovy Scripts\test.groovy: 9: unable to resolve class HTTPBuilder

クラスローダは、スクリプトで作業されない理由を任意のアイデア?私は '@Grab'でインポートするときにjarファイルのパスを表示し、それは間違いなくgrapeディレクトリ内のパスを使用しています。 '@Grab'ステートメントのコメントを外すと、再び動作します。前述のようにここで小さなスクリプト...

//@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7') 

this.getClass().classLoader.rootLoader.addURL(new File("http-builder-0.7.jar").toURL()) 

//return new File(groovyx.net.http.HTTPBuilder.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()); 

def http = new HTTPBuilder('http://httpbin.org/get') 
+0

HttpBuilderを、おそらくこれは –

+0

を下るために滑りやすい斜面です...他の依存関係に依存している、それが依存する依存には何があるかを確認する方法はありますか?これは、これらのjarファイルをダウンロードして同じディレクトリに置くだけで簡単ですか? – John

+1

[あなたはここのPOMで見ることができます](http://search.maven.org/#artifactdetails%7Corg.codehaus.groovy.modules.http-builder%7Chttp-builder%7C0.7.1%7Cjar)問題はそれは依存関係のツリーなので、依存するものは依存関係になります...したがって、滑りやすい勾配です。あなたはグラブを使うのが一番です。または、gradleのようなものを使って太い瓶にスクリプトを作ります –

答えて

0

だ、あなたは、このようなのGradleのapplication pluginなどの別の方法を使用するのが賢明だろう。

しかし、これはあなたが求めていることをする1つの方法です。

まず、jarファイルとすべての依存関係を取得するには、次のGradleを考慮build.gradleスクリプト:

apply plugin: 'java' 

dependencies { 
    compile 'org.codehaus.groovy.modules.http-builder:http-builder:0.7' 
} 

repositories { 
    jcenter() 
} 

clean { 
    doLast { 
     ant.delete(dir: 'runtime') 
    } 
} 

task getDeps(type: Copy) { 
    from sourceSets.main.runtimeClasspath 
    into 'runtime/' 

    doFirst { 
     ant.delete(dir: 'runtime') 
     ant.mkdir(dir: 'runtime') 
    } 
} 

あなたがgradle getDepsを実行する場合、それはruntimeにjarファイルのすべてを書きます。

そして、(例えば)Unixの端末に、あなたがこれにクラスパスを設定することができ(ジャワ6+からワイルドカード構文を使用して、パスを仮定すると、上記と同じruntimeである):

export CLASSPATH=.:"/user/foo/some/path/runtime/*" 

同じ端末では、これは動作します:

import groovyx.net.http.* 

def http = new HTTPBuilder('http://httpbin.org/get') 

println "Ready." 
関連する問題