gradleを使用してflex / as3プロジェクトを構築する

私の意見では、mavenを使用してflexを構築することについてはあまり成功していません詳細はこちら )、gradleを試してみることにしました。 私はそのような計画に従って実験を行うことにしました:



多くのテキストがあるので、だれがそれの由来を気にするか、私はカットをお願いします。 それは実験の途中で書かれたもので、もしあなたが完全に怠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





注釈



Flexプロジェクト



Flexはまだ主要なドキュメントに含まれておらず、配信の例はありません。 もちろん、残念なことですが、他にも多くの例があるため、これは理解できるようです。 しかし、プラグインをざっと見てみると、flex用の認識されているプラ​​グインGradleFの存在に満足しています。 彼から始めましょう。



Gradlefx


一見したところ、プロジェクトは十分に文書化されていますが、大胆な実験だけがその量を示しています。

最初の喜び :プラグインは中央のMavenリポジトリにあります。 そこから彼の最新バージョンを学び、試してみます。

2番目の喜び :どのFlexSDKがプロジェクトで動作するかを示す複数のオプションがあります。 標準のFLEX_HOME、ローカルドライブへの直接パス、および依存関係があります。 私が最も好きな最後の方法は、最も普遍的なものです。



そのため、プロジェクトのタイプをswfとして定義し、Apach Flex SDKに依存し(以前に試したことがないため)、flex sdk自動インストールzipへのパスを決定します(リポジトリにflex sdkがないため、素晴らしい機能です)。



最初の打ち上げ

build.gradle以外に何もないので、出力に失敗しましたが、これは予想されています。 ログから進んでも何が起こりましたか(ログ自体をアップロードできません。大きすぎます)?



起動しましたが、予想よりもやや多かったです。たとえば、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番目に受信したもの:



空気依存性を取り除き、再度組み立ててみます。 組み立てられました。 フラッシュとその関連コンポーネントが置かれているビルドフォルダーを取得します。 2番目のrazipovkaは発生しませんでした。すべてが正常です。



注釈



組立時間の比較(秒)

建てる グラドル メイヴン アイデア
1 12.031 12.172 13
2 6.25 7.63 4
また、FlashDevelopと比較したかったのですが、ビルド時間は表示されません。 IDEAの勝利は、プロジェクトの最初のビルドでの1回限りの構成ダウンロードに基づいている可能性があります。



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
IDEAの場合、正確な時間は言うのが難しく、合計では表示されません。 ログによってカウントされます。 最初の実行:10ビルド+ 3テスト。 確かに、実際のランタイムは1.56秒として示されます。 しかし、ログは1.5後に終了しました。 2回目の実行:5ビルド+ 2テスト。 実際の時間は再び1.5未満です。 しかし、いずれにせよ、IDEAは依然としてスピードのリーダーです。



実際、単体テストを使用することができました。 しかし、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です。 これが大きな問題である可能性は低く、自動的にインストールすることは不可能であり、インストールパスは多かれ少なかれ標準です。 私はこれを合意と見なします。



注釈



ビルドタスクの依存関係を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




All Articles