2012-02-10 8 views
5

私はプラグインを作成していますが、プラグインのルートディレクトリまたはインストールされたディレクトリの中にファイルを書き込もうとしています。私はこの値をどのように保持するかを理解できないようです。 System.properties['base.dir']を実行すると、Grailsプロジェクトのルートディレクトリが実装されます。Grailsプラグインのルートまたはインストールされたディレクトリを取得

C:/ PluginProject/

C:だから今、私は2つのディレクトリを持っている/ GrailsAppThatUsesPlugin/

それは、これがなったときにも同様に2つのディレクトリを持つユーザーがプラグイン配布さというのが私の理解です:

GRAILS_HOME/Grailsのバージョン/プロジェクト/プロジェクト名/プラグイン/ myPlugin/

C:/ GrailsAppThatUsesPlugin/

私のプラグインプロジェクトの中で私はファイルを作成する必要があります。私が書いているファイルは、私のプラグインが提供する他のファイルを参照する必要があるので、私のプラグインの中にいる必要があります。働いていない私が試したいくつかのことです:Groovyのスクリプトで

  1. System.properties['base.dir']
  2. new File("")
  3. あなたは、単にpluginNamePluginDirを参照することができますが、私はこれにアクセスしようとしているプラ​​グイン内ポゴから。
  4. System.propertiesを見ると、プラグインディレクトリはありません
  5. grailsApplicationにはこのタイプの情報が含まれていないようです。

ご協力いただきまして誠にありがとうございます。

答えて

3

あなたはこれを使用することができます:

import org.codehaus.groovy.grails.plugins.PluginManagerHolder 

def pluginManager = PluginManagerHolder.pluginManager 
def plugin = pluginManager.getGrailsPlugin(pluginName) 
def pluginDir = plugin.descriptor.file.parentFile 

プラグイン名は、フォーム'spring-security-core'でなければならない、これは私のために働いていない'springSecurityCore'

+0

このコードをテストに入れ、 'plugin.descriptor'は常にnullです。 'plugin'はnullではありません。また、 'plugin.getPluginDir()'を実行してNPEをスローするとします。何かご意見は?ディスクリプタを利用できるように設定する必要がありますか?ご協力いただきありがとうございます! –

+0

私はこのようなものを使ってしまいました:http://stackoverflow.com/questions/1163093/how-do-you-get-the-path-the-running-script-in-groovyそれは私に私が探していた道を持っていた。 PluginManagerHolderを使用して必要な情報を取得できました。ありがとうBurt! –

11

(インプレースと通常のプラグインの両方を):

import org.codehaus.groovy.grails.plugins.GrailsPluginUtils 

GrailsPluginUtils.pluginInfos.find { it.name == pluginName }.pluginDir 
+4

ありがとうございます。私は検索操作を避けるためにこの方法を使用しています: 'org.codehaus.groovy.grails.plugins.GrailsPluginUtils.getPluginDirForName(pluginName).file.absolutePath' – rodvlopes

関連する問題