- フレックスコンパイル(FlexSDKへのパス/ Maven依存関係)
- as3コンパイル
- フレックスユニットの実行(依存関係)
- flaは静的リソースとしてコンパイルします
- 圧縮する
- コード品質(FlexPMD)
- マルチモジュールプロジェクト
多くのテキストがあるので、だれがそれの由来を気にするか、私はカットをお願いします。 それは実験の途中で書かれたもので、もしあなたが完全に怠lazを読んだなら、最後にテストプロジェクトへのリンクがあります。
Gradleのインストールと第一印象。
解凍-+ Gradle_Home / binを共通のパスにコピーします。 絶対に何もありません。 色があっても、コマンドラインの良いヒント。
Gradleベースのヘルプ
D:\Projects\GradleFlexTest>gradle tasks :tasks ------------------------------------------------------------ All tasks runnable from root project ------------------------------------------------------------ Build Setup tasks ----------------- setupBuild - Initializes a new Gradle build. [incubating] Help tasks ---------- dependencies - Displays all dependencies declared in root project 'GradleFlexTest'. dependencyInsight - Displays the insight into a specific dependency in root project 'GradleFlexTest'. help - Displays a help message projects - Displays the sub-projects of root project 'GradleFlexTest'. properties - Displays the properties of root project 'GradleFlexTest'. tasks - Displays the tasks runnable from root project 'GradleFlexTest' (some of the displayed tasks may belong to subprojects). To see all tasks and more detail, run with --all. BUILD SUCCESSFUL
これがどのように機能するかを最初に理解するために、ユーザーガイドの最初の章から約9章までを読むことができます。 これは、システムの基本原則を実現するのに十分です。
コマンドラインには、コンソール
gradle --gui
向けの使いやすいGUIがあります:
gradle --gui
注釈
- コマンドラインを使用する場合、gradleはスタートアップフォルダーに一時的な.gradleフォルダーを作成し、そこで一時的な作業成果物を追加します。 フォルダは大きくありませんが、実験後に削除するか、gitaで点火する方が良いでしょう。
- GUIが起動すると、追加の設定ファイルが起動フォルダーに作成されます。 私は最初のものと同様に行動すると思います。
- 空のフォルダーのテストビルドを試みると、build.gradleビルドファイルがデフォルト設定で作成されます。 些細なことですが、素晴らしい。
Flexプロジェクト
Flexはまだ主要なドキュメントに含まれておらず、配信の例はありません。 もちろん、残念なことですが、他にも多くの例があるため、これは理解できるようです。 しかし、プラグインをざっと見てみると、flex用の認識されているプラグインGradleFの存在に満足しています。 彼から始めましょう。
Gradlefx
一見したところ、プロジェクトは十分に文書化されていますが、大胆な実験だけがその量を示しています。
最初の喜び :プラグインは中央のMavenリポジトリにあります。 そこから彼の最新バージョンを学び、試してみます。
2番目の喜び :どのFlexSDKがプロジェクトで動作するかを示す複数のオプションがあります。 標準のFLEX_HOME、ローカルドライブへの直接パス、および依存関係があります。 私が最も好きな最後の方法は、最も普遍的なものです。
そのため、プロジェクトのタイプをswfとして定義し、Apach Flex SDKに依存し(以前に試したことがないため)、flex sdk自動インストールzipへのパスを決定します(リポジトリにflex sdkがないため、素晴らしい機能です)。
最初の打ち上げ
build.gradle以外に何もないので、出力に失敗しましたが、これは予想されています。 ログから進んでも何が起こりましたか(ログ自体をアップロードできません。大きすぎます)?
- .gradleフォルダーは、アーティファクトのローカルリポジトリであるホームディレクトリに表示されます。 ここでは、ほとんどの場合、ダウンロードされるすべてのものが追加されます。
- GradleFXプラグインは中央のMavenリポジトリからダウンロードされ、.gradle \ caches \ artifacts-24 \ filestore \ org.gradlefx \ gradlefx \ 0.6.4 \(明らかに、すべてのダウンロードは.gradle \ caches \ artifacts-24 \ filestoreに置かれます\、他の場所が見つからなかったように)
- Ahache Flex SDKのロードとアンパック
- swf-object、swfobject-fabridge、osmfがロードされ、osmf、blase-ds、adobe flex sdkのライセンスについて質問されました
起動しましたが、予想よりもやや多かったです。たとえば、adobe flex sdkは私にはあまり明確ではありません。これは何かの依存関係かもしれません。 彼らは私に何かをダウンロードすることに同意するかどうか二度尋ねました。多分私の足はそこから伸びます。 それでも、必要なコンポーネントが見つかったため、これは幸運と見なすことができます。
足場と最初のビルド。
Scaffoldプラグイン-典型的なプロジェクトの生成。 概して、これは1回限りのアクションですが、まだそこにあるので試してみてください。 現在、scaffoldには、標準プロジェクトを作成するというタスクが1つだけあります。
gradle scaffold
予想どおり、フォルダー構造とmain.mxmlファイルはスタブとして作成されます。 私は何が起こったの最初のビルドを作成しようとしています。
最初の機能 Air SDKの非常に長い処理。タスク、
gradle tasks
などを呼び出すときに解凍されますが、これは明らかに不要です。 おそらくこれが私の間違いです。flexとairの両方の依存関係を含めました。 空気を除去しようとしていますが、これは今のところあまり必要ではありません。 ドキュメントをあまり注意深く読んでいないことがわかりました。sdkの展開は結果のタイプに依存するが、同じフォルダーで行われると明示的に述べています。 これは、さまざまなタイプのプロジェクト(air / flex)を順番に作業するときに、必要なSDKが解凍されることを意味する場合があります。 プロジェクトのタイプが変更されていない場合、再解凍は発生しません。
したがって、最初のビルドは失敗し、2番目のビルドは正常に終了しました。 何だっけ? 2つの依存関係があり、そのうちの1つは除外
2番目に受信したもの:
- 自動インストールフレックスSDK
- エアSDKの自動インストール(長いrazipovkaが取得されたのはここからでした)
- 最新の (エア)インストールされたSDKを使用した実際のビルドmain.mxml
- 結果-失敗-構成ファイルが見つかりませんでした。これは十分に論理的です。
空気依存性を取り除き、再度組み立ててみます。 組み立てられました。 フラッシュとその関連コンポーネントが置かれているビルドフォルダーを取得します。 2番目のrazipovkaは発生しませんでした。すべてが正常です。
注釈
- Graldeは常にプラグイン開発者に警告を表示します。一部のメソッドは廃止予定としてマークされ 、バージョン2(現在の1.6)では削除されますが、代わりに他のメソッドを使用します。 私はいつもそのようなメッセージに満足しています。 警告は、メソッドをすぐに削除するよりもはるかに優れています。 さらに、新しいパスがすぐに示されます。 gradle開発者にとって明確なプラス。
- この実験は、ログで私を驚かせた余分なジャンプを完全に説明しています。 エアSDKが一般的に論理的なAdobe Flex SDKに依存している場合、さらにダウンロードされます。 結論として、注意深く読んで、時々考えてください。 これは便利です。
組立時間の比較(秒)
建てる | グラドル | メイヴン | アイデア |
---|---|---|---|
1 | 12.031 | 12.172 | 13 |
2 | 6.25 | 7.63 | 4 |
AS3コンパイル
私はきれいなas3プロジェクトを翻訳しようとしています。 また、scaffoldを無効にすることもできますが、不要になりましたが、干渉しているようには見えません。 このプラグインの存在はビルド速度に影響を与えません。少しメモリが必要になる場合があります。 そのため、Main.mxmlをMain.asに変更しています。 ビルドはパスしません。 正直なところ、Main.mxmlは見つかりませんでした。 ドキュメントを見て、エントリポイントを担当するプロパティを見つけます。 これは
mainClass
です。 考え出す方が論理的です。 新しい価値を設定する-ビルド成功! 純粋なas3プロジェクトの段階は終了しました。
注:純粋なas3プロジェクトの場合、
frameworkLinkage='none'
を指定することは理にかなっています。 フレックスをフラッシュにリンクしないでください(約-200 b)。
フレックス単体テスト。
スタブクラスとそれをテストするテストを追加します。 Mavenと同様に、FashPlayerを見つける必要があります。 繰り返しますが、FLASH_PLAYER_EXEシステム変数を使用するか、
flexUnit.command
直接設定
flexUnit.command
ます。 私は後者の方法をより明示的な方法として使用します(システム変数を使用するのは好きではありません)。 さらに、必要に応じて、これをプロパティに入れて、Mavenプロファイルと同様に使用できます。
必要な依存関係を追加します。 通常どおり、リポジトリ内の小さなプラグ。 FlexUnitはそのリポジトリをサポートせず、少なくとも公式には公開しません。 GradleFXのドキュメントでは、リポジトリを展開することを強くお勧めしていますが、現時点では、実際にはそうしたくありません。
興味深い CIサーバーへの興味深いリンクがあり、このプロジェクトの進行状況を確認できます。
警告 ドキュメントでは、flexunit-tasksの依存関係のタイプミスは「jar」の拡張であり、「swc」ではありません。 ファイルの依存関係の例の綴りが正しい。
GradleXFのFlexUnitは、Antのflexunitタスクを介して機能します。 これは、私が見たいと思うのとまったく同じ驚きではありませんが、一方で、なぜ機能を複製するのですか? 問題は、このファイルがリポジトリにないことですが、GradleFX自体はあることです。 いくつかの検索により、パブリックリポジトリにflexUnitTasks-4.1.0-8.jarファイルがないことが明らかになりました。 これもまた、独自のデプロイをプッシュします。 ただし、単体テストを実行するには、flexunit自体、flexunit-tasks(ant部分)、およびそれらの間の通信のためのflexunit-cilistenerの3つの依存関係が必要です。 簡単なテストにはどういうわけかたくさん。 したがって、この例からファイルの依存関係を取り上げます。
gradle test
完全に正常に完了しました。
Winユーザーへの注意:すべてのパスは、Windowsでは誰もが慣れているため、「\」ではなく「/」で定義されます。 コマンドラインの出力は、このエラーを丁寧に示します。これにより、検出にかかる時間が大幅に短縮されます。 コマンドラインはますます喜んでいますが、私が見たものの中で最も有益なものです。
テスト実行時間の比較(秒)
建てる | グラドル | メイヴン | アイデア |
---|---|---|---|
1 | 31.061 | 37.891 | 13 |
2 | 14.75 | 17.516 | 7 |
実際、単体テストを使用することができました。 しかし、1つの問題があります-ビルドファイルが移植不能になりました。 絶対パスに依存し、さらに最初の実行のための多くの準備が必要です。 この欠点を取り除き、flex SDKと同様にflexunitの依存関係を自動インストールする機能を追加したいと思います。 私はグルーヴィーの鑑定家ではないので(まったくわかりません)、flex sdk自動インストールの例を使用してこれを実行しようとします。 GradleFXの例とソースコードを調べて、必要に応じて単体テストの依存関係をダウンロードする小さなアドオンを作成しました。 もちろん、このコードは優雅に輝いているわけではありませんが、おそらく初めてではないでしょう。 同時に、システム変数による標準設定の可能性は保持されました。
最初の実行は(最初の実行)が3分に延長されました(主にflexunitのダウンロード-非常に遅いプロセスのため)が、2番目の実行は古い14秒に戻りました。
静的リソースとしてのFla
小さなflaリソースライブラリを作成し、swcでコンパイルしてからコンパイルします。 Adobeからの挨拶の続きとして、jsflスクリプトはコマンドラインからパラメーターを受け入れることができません。 そのため、スクリプトを部分的に生成する必要があります。 実際、スクリプトはFlash CSで実行され、必要かどうかにかかわらず、スクリプトを開く必要があります(そうでない場合は、とにかく開きます。それだけ長くなります)。 生成には
fl.publishDocument
メソッドを使用します。これは、実際にはflaを開きませんが、 quietモードで公開します。 噂によると、それはより速く、メモリは流れません。 いつものように、最初のコンパイルは最も遅く、その後十分に高速です。 flaが多くなるとどうなるかという問題は未解決のままです。
注 AdobeのjsflスクリプトのネイティブエディターであるAdobe ExtendScript Toolkitは、CSアクションエディターに近いものです。 強い意志を持つ人々のために作られました。 私は悪夢のように試みて忘れていました。
このスクリプトを既存のビルドに固定しようとしています。 私はノートに書くのにうんざりしています。プロジェクトをIDEAにインポートしてそこに書き込もうとしています。 インポートはうまくいき、すべてのタスクが表示され、実装されています。 ただし、デフォルトでは、インポート後のbuid.gradleの書き込みは、メモ帳での書き込みとほぼ同じです。 もっとサポートしたいと思っていました。 言語がわからない場合は、オートコンプリートが非常に役立ちます。
2番目の方法を試しています。GradleFXの開発者がIDEAによりグローバルな何かを提供している可能性があります。 このために、IDEプラグインプラグインを使用します。
非表示のテキスト
gradle idea :scaffold Creating directory structure src/main/actionscript src/main/resources src/test/actionscript src/test/resources Main class already exists src/main/actionscript/ :idea Verifying project properties c Creating IntelliJ IDEA project :idea FAILED FAILURE: Build failed with an * What went wrong: Execution failed for task ':id > TODO implement IdeaProject
おっと、このタスクは実装されていないことがわかりました...さて、AkelPadはこのような構文サポートに対応しています。
groovyについての一般的な概念は、何か別のことをしたい場合には、まだ学ばなければなりません(標準プロジェクトの場合は、ドキュメントの例で理解できます)。 ところで、 15分でHabréGroovyに関する良い記事があります。
驚いたことに、fileUriは突然判明したため、普遍的に理解されていません。
Adobe jsfl fileUri file:///d|/Projects/GradleFlexTest/src/main/fla/ Groovy fileUri file:/D:/Projects/GradleFlexTest/src/main/fla/
2番目のタイプでは、CSは機能しませんが、クラッシュしません。 何も起こりません。 Googleとコンソールの出力に没頭した後、タスクはswcでflaファイルをアセンブルすることでした(いくつかの制限はあります)。 概して、1つの絶対パスがありました。 これがCSです。 これが大きな問題である可能性は低く、自動的にインストールすることは不可能であり、インストールパスは多かれ少なかれ標準です。 私はこれを合意と見なします。
注釈
- CSはPATHに記述でき、cmdはjsflスクリプトを直接実行できます。
- コマンドラインを介して実行されているantの例を見てください。 CSへの絶対パスを取り除くことができます。
- この場合、
task flaBuild << { ... }
タスクはtask flaBuild << { ... }
として定義する必要があります。スクリプトが自発的に実行されると、タスクは実行を開始しません。 タスクをtask flaBuild(){ ... }
またはtask flaBuild{ ... }
として定義すると、その呼び出しに関係なく実行のためにtask flaBuild{ ... }
が起動されます。 これはおそらく、私が知らないグルーヴィーな/グラドル機能です。 - CSは最後の実行可能ファイルjsflまたはswcを「保持」するため、
clean
タスクはビルドフォルダーを削除できません。 これは、明示的なCSクロージャーを追加することで修正できますが、ビルドが大幅に長くなります。 したがって、今のところはそのままにしておきます。
ビルドタスクの依存関係をflaBuildタスクに追加し、SymbolViewという名前でエクスポートされるライブラリリソースにアクセスしようとします。 プラダ、私はログに基づいた一連のタスクに多少混乱しています。
:copyresources :compileFlex UP-TO-DATE :flaBuild :copytestresources
これは、間違ったタスクに依存していることを意味する場合があります。 正確には、compileFlexタスクには依存関係が必要ですが、gradleタスクの一般的なリストには含まれていません。 収集されたflaリソースにも依存する必要があります。 Javaプラグインにある機会を使用しました。 プロジェクトで利用可能なプロパティのリストを見て、偶然見つけました。 おそらくこれは完全に正直ではありませんが、そのような特性があるので、なぜそうではありません。
そのため、「fla、静的リソースとして」合格した段階を考えることができます。
圧縮解除
最終的なフラッシュを圧縮するには、FlexMojosを見たときに出会ったApparatプロジェクトを使用します。 リポジトリーにあるmavenの標準プラグインがあります。 アリ用の部品を使用してみます。
残念なことに、Antのドキュメントはありませんが、例があり、それを基礎として取り上げます。 失敗-apparatを使用するにはScalaが必要です。 私もそれをインストールしたくありません。 たぶん後で。 ここでは、Mavenリポジトリが提供する依存関係の解決策を活用することは素晴らしいことですが、これは実際にはプロジェクトの依存関係ではなく、プラグインの類似物です。 言い換えれば、後でそれを使用する方法を本当に理解していません。
問題47が見つかったため、より均等に実装できます。 したがって、私は欠場します。
FlexPMD
2回目はこのプロジェクトを使用し、2回目は簡単な方法では実行できません。 文書化の実際の欠如は、試みることを完全に落胆させます。 リポジトリsvnが外部に公開されると、だれが望んでいるかを調べることができます。 その一部は、非常に独特な方法でのMavenリポジトリです。 ダウンロードして解凍する必要があるzipがあります。 つまり 正しく理解すれば、これをMaven依存関係として使用しても機能しません。
しかし、予想外のことに、ネイティブドキュメントの特性にもかかわらず、私はなんとか既存のコードに関するレポートを入手することができました。 確かに、私は1つのソースディレクトリに対してのみそれをしましたが、私はもう持っていません。 さらに、これを修正することはまったく難しくありません。
私はこのプロジェクトの状態を本当に理解していません。それは必要なようですが、非常に軽視された形で、彼らはいつか開発者を連れて他のプロジェクトに移したようです。 そして、これは彼の暇なときにのみ行われます。 パンを無料で粉砕するのは罪ですが。
マルチモジュールプロジェクト
プラグインのドキュメントには、マルチモジュールプロジェクトが通常実行されると書かれており、gradleのドキュメントを参照しています。 それでは、試してみます。 既存のプロジェクトを2つのアプリケーションとライブラリに分割します。
すべてが非常にシンプルであることが判明しました。 ほとんどすべての方法でプロジェクト間の依存関係を決定できます。 すべてのプロジェクトは相互に利用可能です。 ビルドは、プロジェクトごとに個別に実行することも、すべて一緒に実行することもできます。
トラブルから:プロジェクトは以前のように、14に対して、約21秒とはるかに長く集まり始めました。 おそらく、これらは統合サーバーのソリューションです。
結論として
Graldeは非常に強力なビルドツールであり、一般的なソリューションでは、Graldeに入るためのしきい値は大きくありません。 エキゾチックなものを作成するには、groovy、gradle api、および使用するプラグインの機能に関する知識が必要です。 結果として得られるビルドスクリプトは、通常、グルーヴィーな知識がなくても理解でき、xmlよりもはるかにコンパクトです。
GradleFXは、開発に必要なほぼすべてのことを実行できます。 zipを自動的にインストールする機能が欠けていましたが、ひざの上で行うことが判明しました。 アーカイブタイプの依存関係があるため、これはすでに存在している可能性があります。アンパック(または自動インストール)する機能が必要です。 複雑な推移的な依存関係の解決を試みることはできませんでしたが、そうなると約束しています。
一般的に、サンプルからの感覚は良好で、maven + FlexMojosよりもはるかに優れています。 標準があることは良いことですが、違反することもできます。 これは特にフレックス/フラッシュの場合に当てはまります。なぜなら、ここでは何らかの形で規格が実際に根付かないからです。
IDEAからのサポートは、Mavenよりも著しく弱いです。 実際、タスクを呼び出す基本機能は利用可能であり、スクリプト自体の作成はサポートされていません。 これは奇妙なことです。なぜなら、グルーヴィーなプロジェクトを実行できるからです。
実験が行われたプロジェクトには、行動の過程で書かれたドラフト記事もあります。 差分により、いつ何が追加されたかを正確に確認できます。
資源
グラドル
gradleについてのHabr
Maven-> Gradleライフの例、ディスカッション
Gradlefx
jsfl
Apparat-ABC、SWC、SWFファイルを最適化するフレームワーク
FlexPMD