0

我正在開發一個供內部使用的Grails 2.2.3插件,並且在插件中我想要在每個應用程序中使用配置的安全設置。 Spring Security配置,Spring Security LDAP配置以及自定義的UserDetails類和UserDetailsContextMapper類。將Spring Security依賴添加到Grails插件

我有所有的照顧,但我遇到的問題是,我不能讓依賴在插件中正常工作。如果使用該插件的應用程序在其插件依賴項中聲明spring-security-corespring-security-ldap,但應用程序不應該聲明此依賴項 - 插件應該處理它。

那麼如何讓這個插件正確安裝並使用spring-security-corespring-security-ldap插件呢?這是在我的插件文件BuildConfig.groovy:

plugins { 
     compile ":spring-security-core:1.2.7.3" 
     compile ":spring-security-ldap:1.0.6" 
     //Putting this in the app USING the plugin makes it work fine. 
    } 
+0

這應該transitively解決 - 你如何在應用程序中使用你的插件?如果它是內聯的,這可能會失敗,但從zip或本地artifactory/nexus /等安裝應該工作正常 –

+0

我真的希望你會出現,伯特。 它實際上是內聯的。我正在開發它並使用測試應用程序來處理它。我可以嘗試將它打包爲zip,然後按照這種方式進行安裝。 – grantmcconnaughey

+0

更新:沒有這樣的運氣。我在插件塊中聲明瞭這個錯誤嗎?我應該在dependencies塊中聲明它嗎? – grantmcconnaughey

回答

2

plugins塊是正確的。如果從拉鍊安裝後無法正常工作,則可能會從前面留下一些殘留物。

爲了保持在一個地方,我想刪除

grails.project.class.dir = "target/classes" 
grails.project.test.class.dir = "target/test-classes" 
grails.project.test.reports.dir = "target/test-reports" 

,並取代它們與

grails.project.work.dir = 'target' 

所以一切都是target文件夾下。當事情變得怪異時,運行rm -rf target以強制完全重新解析並重建。

然後,使用發佈插件的maven-install腳本,而不是使用內聯插件(因爲我們現在從POM文件中讀取信息,並且這些信息不適用,除非您正確打包插件)或者使用內聯插件。

一下添加到plugins部分(刪除你可能有任何舊版本):

build ':release:2.2.1', ':rest-client-builder:1.0.3', { 
    export = false 
} 

和運行grails compile,尋求解決辦法之後,maven-install腳本可用。這包裝您的插件並將其複製到$HOME/.m2/repository文件夾中的正確位置。然後,如果您在應用程序的BuildConfig.groovy中的repositories塊中添加或取消註釋mavenLocal(),則可以在應用程序中爲您的插件添加依賴項,就好像它是在主repo中發佈的一樣。

plugins { 
    compile ':my-cool-security-plugin:0.1' 
} 

重辦grails maven-install定期,當你更改了插件,並且刪除目標目錄下強制進行重新安裝的應用程序。

+0

感謝您的深入。我嘗試了這些步驟。在編譯插件時,Spring Security Core和LDAP都安裝在插件中。然後我運行maven-install並創建了一個'pom.xml'文件,它看起來好像被安裝到'$ HOME /。m2/repository/org/grails/plugins/security-plugin/0.1 /'(希望這是它所屬的地方)。但是,當我嘗試使用插件運行應用程序時,在任何引用'org.springframework.security。*'(導入,UserDetails實現等)的地方都會遇到編譯錯誤。所以沒有這樣的運氣。 :( – grantmcconnaughey

+0

@grantmc在您的應用程序中使用自定義插件的'BuildConfig.groovy'如何顯示?具體而言,您是否在'存儲庫{..}'中繼承了'?' – dmahapatro

+0

我檢查了〜〜/ .grails/2.2.3/projects/myapp/plugins /'和我的security-plugin在那裏,但是spring-security-core和spring-security-ldap不是 - 儘管它們都在該插件的dependencies.groovy中聲明'file和'plugin.xml'文件 – grantmcconnaughey