1

私はGradleマルチプロジェクトを持っています。

プロジェクトの 1 つは、gradleFx プラグインを使用してビルドされた Flex プロジェクトです。

2 つ目は war プロジェクトで、Flex プロジェクトの SWF ファイルを war に含める必要があります。

私は追加します

war { 
  from (project(":flex:FlexManager").buildDir) {into ('flash')}
}

SWF を戦争状態にしますが、それは SWF が既に存在する場合のみです。

次に、戦争のビルド中にgradleが :flex:FlexManager プロジェクトをビルドするようにします。だから私は追加します

dependencies {
  ....
  runtime project(path : ':flex:FlexManager')
}

warビルド中にflexプロジェクトのビルドを開始する唯一の方法は、

war { 
  ...
   dependsOn ':flex:FlexManager:build'
}

しかし、それは最善の方法ではないようです-タスクの依存関係ではなく、プロジェクトの依存関係を定義することを好みます

4

2 に答える 2

2

変更する必要があるのは、ディレクトリではなく、タスクまたはタスク出力からコピーすることを指定することだけです。これにより、war タスクと、swf ファイルをビルドするタスクとの間の暗黙の依存関係が登録されます。

swf ファイルをビルドするタスクがその出力を指定する必要があると述べました。GradleFx をざっと見てみましたが、残念ながら compileFlex タスクでは実行されないようです。最初に、次の方法でタスクの出力を指定する必要があります。

compileFlex {
    outputs.dir project.buildDir
}

次に、war タスクの構成を変更します。

war {
    from project(":flex:FlexManager").compileFlex {
        into ('flash')
    }
}

おそらく、GradleFx 開発者に、彼らのタスクに出力を追加するように頼むべきでしょう。:)

編集:

コメントの議論から、タスクに依存するのではなく、プロジェクトの成果物に依存できることがわかりました。最もクリーンな方法は、カスタム構成を作成し、それに依存関係を追加してから、war タスクを構成するときに from 呼び出しで使用することです。

configuration {
    flex
}

dependencies {
    flex project(':flex:FlexManager')
}

war {
    from configurations.flex {
        into ('flash')
    }
}

おそらく、アーカイブまたはデフォルト設定を:flex:FlexManager直接使用することもできます。

war {
    from project(':flex:FlexManager').configurations.archives {
        into ('flash')
    }
}
于 2013-02-14T17:54:29.650 に答える
0

私のプロジェクトにも同様の要件がありました。flex プロジェクトの出力である swf ファイルを Java プロジェクトにインクルードし、war をビルドする必要があります。

1. I created a two sub project under war project, flex and java.
2. Included them in settings file.
3. The main build.gradle file has basic configuration.
4. In flex sub project gradlefx plugin is applied and the output swf file is copied to the directory using a copy task.
5. In java sub project war plugin is applied and the source directory is mentioned from which war has to be generated.

参照用のコード例を次に示します。

settings.xml:

include myproject,
myproject:mysubproject:flex,
myproject:mysubproject:java

myproject ディレクトリの build.gradle ファイル:

buildscript {
    dependencies {
        classpath project (":FlexProject") //include all the flex project from which the swf file to be included
    }
}
dependencies {
    classpath project (":JavaProject") //include all the dependent java project if any
}

sourceSets {
  main {
    output.classesDir   = 'root/WEB-INF/classes' //This is the directory from which I am going to generate war.
  }
}

myproject/mysubproject/flex ディレクトリの build.gradle ファイル:

apply plugin: 'gradlefx'
type = 'swf'
dependencies{
    merged project (":FlexProject")
}

String rootProjectDir = rootDir
rootProjectDir = rootProjectDir.replaceAll("\\\\","/")

task copyTask <<{
    copy{
        from rootProjectDir +'/MyFlexProject1/build'
        into rootProjectDir +'/myproject/root'
        include '**/*.swf'
    }
}
build.finalizedBy(copyTask)

myproject/mysubproject/java ディレクトリの build.gradle ファイル:

String rootProjectDir = rootDir
rootProjectDir = rootProjectDir.replaceAll("\\\\","/")
String rootProjectDirDocRoot = rootProjectDir + '/myproject/root'

dependencies {
    compile project (":JavaProject")    //to include dependent jars in war
}

group = "com.abc.enterprise"
archivesBaseName = "myprojet"
description = "myproject"
apply plugin: 'war'

war{
    from rootProjectDirDocRoot
    exclude('.gradle')
    exclude('.settings')
}

これにより、毎回 flex プロジェクトがコンパイルされ、war をビルドする必要があるディレクトリに swf ファイルが含まれます。お役に立てれば。

于 2016-04-29T10:44:53.307 に答える