Groovy スクリプトをあるスクリプトから別のスクリプトにインポートする

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

これは、Groovy スクリプトを別のスクリプトにインポートしてコードを構造化できるようにする方法です。

InsightLogClass.groovy

import com.atlassian.jira.component.ComponentAccessor;
 
public Object getObject(String key) {
        Class objectFacadeClass = ComponentAccessor.getPluginAccessor().getClassLoader().
                                findClass("com.riadalabs.jira.plugins.insight.channel.external.api.facade.ObjectFacade");
        def objectFacade = ComponentAccessor.getOSGiComponentInstanceOfType(objectFacadeClass);
        return objectFacade.loadObjectBean(key);
}

絶対パスの使用

LogObject.groovy

def PATH_TO_SCRIPTS = "/Users/.../groovy/";
 
File insightLogClassFile = new File(PATH_TO_SCRIPTS, "InsightLogClass.groovy");
Class insightLogClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(insightLogClassFile);
GroovyObject insightLogObject = (GroovyObject) insightLogClass.newInstance();
 
log.warn(insightLogObject.getObject(object.objectKey));

LogObject.groovy ファイルを自動化ルールで実行すると、影響を受けるオブジェクト (もともとあったもの) をログアウトします。

スクリプトには絶対パスの代わりに次のものを使えます

def PATH_TO_SCRIPTS = new File(getClass().protectionDomain.codeSource.location.path).parent


これにより、Jira で自動化スクリプトが格納されているディレクトリへのパスが提供されます。このディレクトリ内の Groovy クラスがアクセスしやすくなりました。

もう 1 つの利点は、すぐに使えるさまざまな Jira インスタンスで動作することです。たとえば、実稼働インスタンスと QA/テスト/開発インスタンスがある場合、それぞれスクリプトが存在する場所のパスは異なります。パスを動的に見つけるということは、それらのすべてのインスタンスで何の変更もせずにコードが動作することを意味します。

LogObject.groovy

def PATH_TO_SCRIPTS = new File(getClass().protectionDomain.codeSource.location.path).parent
 
File insightLogClassFile = new File(PATH_TO_SCRIPTS, "InsightLogClass.groovy");
Class insightLogClass = new GroovyClassLoader(getClass().getClassLoader()).parseClass(insightLogClassFile);
GroovyObject insightLogObject = (GroovyObject) insightLogClass.newInstance();
 
log.warn(insightLogObject.getObject(object.objectKey));

LogObject.groovy ファイルを自動化ルールで実行すると、影響を受けるオブジェクト (もともとあったもの) をログアウトします。


Last modified on Mar 25, 2024

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.