tl;dr バージョン
カスタム grails プラグインの依存関係は、プラグインをインストールしたプロジェクトによって継承および解決されませんでした。
- リリース プラグインの最新バージョンをプラグインにインストールします (jar 依存関係の問題を修正します)。
- BuildConfig.groovy ファイルに存在する可能性のあるプラグインへの参照をすべて消去します (プラグインの依存関係の問題を修正します)。
grails maven-install
プラグインを mavenLocal() ソースで利用できるようにする
ロングバージョン
そのため、大学で内部使用するカスタム grails プラグインを作成しようとしています。
プラグインを BuildConfig.groovy ファイルのプラグイン クロージャーに配置すると、プラグインだけでなく、その BuildConfig.groovy ファイル (または、パッケージ化後、その dependencies.groovy) でプラグインに対して定義されたすべての依存関係が自動的にインストールされる場合、それが本当に好きです。ファイル)。
手順を見て、プロジェクトの BuildConfig.groovy ファイルをリポジトリ クロージャーでこれを使用してセットアップしました。
flatDir name:'my-plugin', dirs:'/Users/me/workspace-ggts/myplugin'
次に、これをプラグインクロージャーに追加しました:
compile(":grails-my-plugin:0.1")
これにより、プラグインは正しくインストールされますが、プラグインの依存関係や必要なプラグインは解決されません。プラグインの BuildConfig.groovy ファイルの 3 つの主なクロージャーは次のとおりです。
repositories {
grailsCentral()
mavenCentral()
mavenRepo "http://www.mygrid.org.uk/maven/repository"
def jbossResolver = new org.apache.ivy.plugins.resolver.URLResolver()
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/[module]/[revision]/[artifact]-[revision].[ext]")
jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/javax/media/[module]/[revision]/[artifact]-[revision].[ext]")
resolver jbossResolver
}
dependencies {
compile (
[group:'javax.media', name:'jai-core', version:'1.1.3'],
[group:'com.sun.media', name:'jai-codec', version:'1.1.3']
)
compile "net.java.dev.jai-imageio:jai-imageio-core-standalone:1.2-pre-dr-b04-2013-04-23" //this jar comes from the mygrid mavenRepo
}
plugins {
build(":tomcat:$grailsVersion",
":release:1.0.0") {
export = false
}
compile ":spring-security-core:1.2.7.3"
compile ":wslite:0.7.2.0"
}
を使用してプラグインを実行するgrails run-app
と、これらの依存関係がすべて問題なく解決されます。自動依存関係解決が失敗するのは、プラグインがプロジェクトにインストールされている場合のみです。
プラグインを Maven アーティファクトにして、ローカル リポジトリにコピーしてみました。そのような場合、クロージャーflatDir
から行を削除しrepositories
、mavenLocal() に置き換えました。繰り返しますが、プラグイン自体はインストールされますが、指定された依存関係はどれもインストールされません。
BuildConfig.groovy の legacyResolve を true に設定しようとしましたが、これも jar または必要なプラグイン (wslite など) のインストールに失敗します。
を手動で指定しようとしcompile(":grails-my-plugin:0.1") {transitive: true}
ましたが、それでもプラグインは解決されません。
上記のすべての試行の間に、プラグインをアンインストールgrails clean
し、プロジェクトで実行し、~/.grails/2.2.3/cached-installed-plugins/ ディレクトリの内容を削除し、Burt の神聖な名前をイントニングしながら libation を注ぎました。 Beckwith ですが、まだ推移的な解決策が得られません。
もう 1 つの注目すべき点: プロジェクトで依存関係レポートを実行しました。依存関係の中に私のプラグインがリストされていますが、レポートにはプラグイン自体には依存関係がないと書かれています。
また、依存関係レポートを取得するために、refresh-dependencies myAppDeps.xml も実行しました。これには、バニラ grails プロジェクトの依存関係でもないプラグインの依存関係は含まれていません。
パブリック リポジトリの Grails プラグインは、依存関係を自動的に解決します (例として、BuildConfig.groovy ファイルに spring-security-ldap を入れてみると、spring-security-core がインストールされます)。推移的な解決は、ローカル プラグインでは機能しませんか? _Install.groovy に何かを追加するなど、機能させる方法はありますか?
アップデート
そこで、dmahapatro さんの提案を試してみました。これは、プロジェクトにインストールされている myPlugin が依存する jar を取得するために機能しました。したがって、プロジェクトがコンパイルされ、依存関係レポートに必要な jar が含まれます。ただし、myPlugin が依存するプラグインは、myPlugin もインストールするプロジェクトにまだインストールされていません。コンパイルが成功した後にアプリを実行しようとすると、次のエラーが発生します。
| Error Error: The following plugins failed to load due to missing dependencies: [myPlugin]
- Plugin: myPlugin
- Dependencies:
- springSecurityCore (Required: 1.2 > *, Found: 1.2.7.3)
- jquery (Required: 1.7 > *, Found: 1.8.3)
! wslite (Required: 0.7.2 > *, Found: Not Installed) [INVALID]
更なるアップデート
そこで、問題の切り分けを試みることにしました。新しいプラグイン ( grails create-plugin transitiveDep
) と新しいプロジェクト ( grails create-app horseradish
) を作成しました。作業中のプロジェクトから BuildConfig.groovy の関連部分をそれぞれにコピーし、プラグインの依存関係を my-plugin から transitionive-dep に変更しました。
驚いたことに、ホースラディッシュは必要なすべての依存関係 (wslite、springSecurityCore) を正常にインストールしました。古いバージョンの jQuery をインストールするかどうかも尋ねられました。
というわけで、私の環境では問題ありません。この時点で、プラグインの構成に何か問題があると思われます。これはもともと Grails 2.0.1 で書かれ、その後 2.2.3 にアップグレードされました。また、transitive-dep プラグインと同じように、新しいアプリにインストールしようとしましたが、それでもプラグインの依存関係を解決できませんでした。問題がどこにあるのか正確に把握できたら、更新を投稿します。
最終更新
したがって、プラグインのインストールを妨げているのは、myPlugin が application.properties ファイルと BuildConfig.groovy でプラグインを参照していたことです。パッケージ化する前にそれらへの参照を削除すると、プラグインは問題なくインストールされました。
また、myPluginGrailsPlugin.groovy ファイルに古い Grails バージョン (2.0) が残っていることと、必要がないように思われる dependsOn マップが残っていることにも気付きました。これらの行を削除/変更しましたが、application.properties の古い参照をクリアするまで、実際に機能し始めませんでした。
特に、myPlugin に変更を加えた後、~/.grails/2.2.3、~/.grails/ivy-cache フォルダー、および ~/.m2/repository/org/grails/plugins/ ディレクトリもクリアする必要がありました。私のプロジェクトはまだ古いバージョンをインストールしようとします。私はそれをするのにとてもうんざりしていたので、それを行うためのシェルスクリプトを作成しました:
cd ~/.grails/2.2.3/
rm -r *
cd ~/.grails/ivy-cache/
rm -r *
cd ~/.m2/repository/org/grails/plugins/
rm -r *