2012-02-10 28 views
5

Tôi đang viết một plugin và tôi đang cố gắng viết một tệp bên trong thư mục gốc hoặc thư mục được cài đặt của Plugin (không chắc chắn nên tham khảo điều này). Tôi dường như không thể tìm ra cách để nắm giữ giá trị này. Làm System.properties['base.dir'] sẽ dẫn đến việc triển khai thư mục gốc của dự án Grails. Vì vậy, ngay bây giờ tôi có hai thư mục:Plugin Grails Nhận Thư mục gốc hoặc Thư mục cài đặt

C:/PluginProject/

C:/GrailsAppThatUsesPlugin/

Đó là sự hiểu biết của tôi rằng khi điều này trở thành một phân phối cắm một người sử dụng tương tự sẽ có hai thư mục:

GRAILS_HOME/grails-phiên bản/dự án/projectname/plugins/myPlugin/

C:/GrailsAppThatUsesPlugin/

Bên trong dự án plugin của tôi, tôi cần tạo một tệp. Nó cần phải được bên trong plugin của tôi bởi vì các tập tin tôi đang viết cần phải tham khảo các tập tin khác mà plugin của tôi cung cấp. Một vài điều mà tôi đã cố gắng mà chưa từng làm việc là:

  1. System.properties['base.dir']
  2. new File("")
  3. Trong một kịch bản hấp dẫn trong vòng một plugin bạn chỉ có thể tham khảo pluginNamePluginDir nhưng tôi đang cố gắng để truy cập này từ một POGO.
  4. Nhìn vào tất cả các System.properties không ai trong số họ có thư mục plugin
  5. grailsỨng dụng dường như không chứa loại thông tin này.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

3

Bạn có thể sử dụng này:

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

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

Tên Plugin phải có dạng 'spring-security-core', không 'springSecurityCore'

+0

Tôi đặt mã này vào thử nghiệm và 'plugin.descriptor' luôn là rỗng. 'Plugin' không phải là null. Ngoài ra nếu tôi làm 'plugin.getPluginDir()' để ném NPE. Có suy nghĩ gì không? Tôi có cần định cấu hình thứ gì đó để bộ mô tả có sẵn không? Cảm ơn bạn đã giúp đỡ! –

+0

Tôi đã kết thúc bằng cách sử dụng một cái gì đó như thế này: http://stackoverflow.com/questions/1163093/how-do-you-get-the-path-the-running-script-in-groovy. Nó đã cho tôi con đường mà tôi đang tìm kiếm. Tôi đã có thể sử dụng PluginManagerHolder để nhận các thông tin khác mà tôi cần. Cảm ơn Burt! –

11

này đã làm việc cho tôi (cả tại chỗ và plug-in thường xuyên):

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

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

Cảm ơn. Tôi đang sử dụng cách này để tránh hoạt động tìm kiếm: 'org.codehaus.groovy.grails.plugins.GrailsPluginUtils.getPluginDirForName (pluginName) .file.absolutePath' – rodvlopes

Các vấn đề liên quan