2012-02-10 35 views
5

我正在編寫一個插件,我正在嘗試在插件的根目錄或已安裝的目錄(不確定要引用此目錄)中編寫一個文件。我似乎無法弄清楚如何獲得這個價值。執行System.properties['base.dir']將導致實現Grails項目的根目錄。所以現在我有兩個目錄:Grails Plugin獲取插件的根目錄或已安裝的目錄

C:/ PluginProject/

C:/ GrailsAppThatUsesPlugin/

這是我的理解是,當這成爲一個分佈式的插件,用戶將同樣有兩個目錄:

GRAILS_HOME/Grails的版本/項目/項目名稱/插件/爲myplugin/

C:/ GrailsAppThatUsesPlugin/

我的插件項目中需要創建一個文件。它需要在我的插件裏面,因爲我正在寫的文件需要引用我的插件提供的其他文件。這都沒有奏效,我已經試過幾件事情:

  1. System.properties['base.dir']
  2. new File("")
  3. 在插件中Groovy腳本,你可以簡單地參考pluginNamePluginDir,但我想訪問此來自POGO。
  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'總是空的。 'plugin'不是null。另外如果我做'plugin.getPluginDir()'拋出一個NPE。有什麼想法嗎?我是否需要配置描述符可用的內容?謝謝你的幫助! – 2012-02-13 14:28:13

+0

我結束了使用這樣的東西:http://stackoverflow.com/questions/1163093/how-do-you-get-the-path-the-running-script-in-groovy。它爲我帶來了我期待的道路。我能夠使用PluginManagerHolder獲取我需要的其他信息。謝謝Burt! – 2012-02-13 20:43:52

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 2013-07-15 14:24:06