teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

afterEvaluate問題解決の追加

2017/07/23 20:18

投稿

b7n
b7n

スコア30

answer CHANGED
@@ -25,4 +25,37 @@
25
25
  └ build.gradle // ← evaluationDependsOnを適用
26
26
  ```
27
27
 
28
- しかし、rootProjectにサブプロジェクト依存関係が複数読み込まれるため、プラグイン同士競合してしまうのが今後の課題です。
28
+ しかし、evaluateあとにapplyしているため、プラグインのafterEvaluate呼ばれないためエラーを起こしてしまうのが今後の課題です。
29
+
30
+ 追記
31
+ ---
32
+ イベントを再発火させることで解決しました。
33
+ ```gradle
34
+ //rootproject/build.gradle
35
+ subprojects {
36
+ buildscript {
37
+ repositories {
38
+ jcenter()
39
+ maven { url = "http://files.minecraftforge.net/maven" }
40
+ }
41
+ dependencies {
42
+ classpath project.forgegradle // gradle.propertiesにて外部化
43
+ }
44
+ }
45
+
46
+ // パラメータを確保
47
+ def subproj, substate
48
+ afterEvaluate { p, s ->
49
+ subproj = p
50
+ substate = s
51
+ }
52
+
53
+ // evaluationDependsOnを使うことにより依存関係が読み込まれる
54
+ rootProject.evaluationDependsOn(project.name) // または project.evaluate() でも可
55
+
56
+ apply plugin: project.forgegradle_plugin // gradle.propertiesにて外部化
57
+
58
+ // イベントを再発火
59
+ project.projectEvaluationBroadcaster.afterEvaluate(subproj, substate);
60
+ }
61
+ ```