日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java groovy jar包_如何将jar包包含在groovy脚本中?

發布時間:2025/5/22 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java groovy jar包_如何将jar包包含在groovy脚本中? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果你真的需要,你也可以在運行時加載一個JAR:

this.getClass().classLoader.rootLoader.addURL(new File("file.jar").toURL())

使用#!/usr/bin/env groovy啟動groovy腳本有一個非常重要的限制 – 不能添加額外的參數。 沒有classpath可以configuration,沒有定義或在debugging運行groovy。 這不是一個常規的問題,但在shebang( #! )的工作方式上有一個限制 – 所有附加的參數都被當作單一的參數,所以#!/usr/bin/env groovy -d告訴/usr/bin/env運行那么這個命令就會隨著d一個參數而變化。

這個問題有一個解決方法,它涉及在groovy腳本中使用bash引導groovy 。

#!/bin/bash //usr/bin/env groovy -cp extra.jar:spring.jar:etc.jar -d -Dlog4j.configuration=file:/etc/myapp/log4j.xml "$0" $@; exit $? import org.springframework.class.from.jar //other groovy code println 'Hello'

所有的魔法都發生在前兩行。 第一行告訴我們這是一個bash腳本。 bash開始運行并看到第一行。 在bash #是用于注釋和/被折疊到/哪個是根目錄。 所以bash會運行/usr/bin/env groovy -cp extra.jar:spring.jar:etc.jar -d -Dlog4j.configuration=file:/etc/myapp/log4j.xml "$0" $@開始groovy與所有我們想要的論點。 "$0"是我們腳本的path, $@是參數。 現在groovy運行,它忽略了前兩行,看到我們的groovy腳本,然后退出到bash 。 然后bash退出( exit $?1 )與groovy的狀態代碼。

您可以將這些jar子添加到$ HOME / .groovy / lib

我最喜歡的方式是使用Groovy Grapes。 這些訪問Maven Central Repository,下載引用的jar,然后放到classpath中。 然后,您可以像使用其他庫一樣使用該庫。 語法非常簡單:

@Grab(group='com.google.collections', module='google-collections', version='1.0')

你可以在這里細節。 這里的一個主要優點是在分發腳本時不需要分配依賴關系。 這個方法唯一的缺點是Jar必須在Maven倉庫中。

你也可以嘗試Groovy葡萄。 它允許您使用注釋來修改類path。 它的實驗現在,但很酷。 請參閱http://groovy.codehaus.org/Grape

和你在Java中一樣。

這是運行MySQL狀態監視腳本的一個例子。 mysql.jar包含我從腳本status.groovy調用的MySQL連接器。

groovy -cp mysql.jar status.groovy ct1

他的回答給@帕特里克增加了很多,最近我發現了另外一個竅門。

如果你把大量的jar添加到classpath中,那么事情會變得很難理解。 但是你可以做以下的事情!

#!/bin/bash //bin/true && OPTS="-cp blah.jar -Dmyopt=value" //bin/true && OPTS="$OPTS -Dmoreopts=value2" //usr/bin/env groovy $OPTS "$0" $@; exit $? println "inside my groovy script"

讓你的想象力瘋狂在命令行的復雜程度上,你可以把它分解成可pipe理的部分

馬騰

下面是Patrick的解決scheme , Maarteen Boekhold的解決scheme和foozbar的評論的結合,可以在Linux和Cygwin上使用:

#!/bin/bash // 2>/dev/null; SCRIPT_DIR="$( cd "$( dirname "$0" )" && pwd )" // 2>/dev/null; OPTS="-cp $SCRIPT_DIR/lib/extra.jar:$SCRIPT_DIR/lib/spring.jar" // 2>/dev/null; OPTS="$OPTS -d" // 2>/dev/null; OPTS="$OPTS -Dlog4j.configuration=file:/etc/myapp/log4j.xml" // 2>/dev/null; exec groovy $OPTS "$0" "$@"; exit $? import org.springframework.class.from.jar //other groovy code println 'Hello'

怎么運行的:

//是一個有效的groovy注釋,所以所有的bash命令都被Groovy忽略。

//將返回一個錯誤,但錯誤輸出被redirect到/dev/null ,因此不會顯示。

即使前面的命令失敗,bash也會在分號之后執行命令。

exec取代當前進程中的當前程序,而不需要分配新的進程。 因此,Groovy在原始腳本進程中運行( ps將進程顯示為腳本而不是groovy可執行文件)

exit $? exec groovy語句阻止bash嘗試將腳本的其余部分解釋為bash腳本,并保留groovy腳本的返回碼。

在某些情況下,上述bash技巧比RootLoader技巧更方便,因為您可以在腳本中使用常規導入語句。 使用RootLoader技巧迫使你使用reflection來加載所有的類。 在某些情況下(例如,當您需要加載JDBC驅動程序時),這很好,但在其他情況下不方便。

如果您知道您的腳本永遠不會在Cygwin上執行,那么使用Patrick或Maarteen的解決scheme可能會導致稍微好一點的性能,因為它們避免了生成和拋出錯誤的開銷。

如果你想在import聲明之前馬上使用它,可以像這樣:)

// printEmployees.groovy this.class.classLoader.rootLoader.addURL( new URL("file:///C:/app/Dustin/product/11.1.0/db_1/jdbc/lib/ojdbc6.jar")) import groovy.sql.Sql sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:orcl", "hr", "hr", "oracle.jdbc.pool.OracleDataSource") sql.eachRow("SELECT employee_id, last_name, first_name FROM employees") { println "The employee's name is ${it.first_name} ${it.last_name}." }

采取從這個javaworld.com文章 。

總結

以上是生活随笔為你收集整理的java groovy jar包_如何将jar包包含在groovy脚本中?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。