Distribute Build یکی از قابلیت های فوق العاده کامپایلر GWT می باشد. از زمانی که یک مطلب درباره این قابلیت در قسمت wiki سایت GWT مطالعه کردم تصمیم گرفته ام هر چه زودتر از این قابلیت برای پروژه خودم در آن مشغول به کار هستم استفاده بکنم.
یکی از فرایند های زمانگیر در GWT کامپایل نهایی پروژه به جاوااسکریپت برای استقرار آن برروی سرور می باشد. برای مثال پروژه ای که در حال حاضر من روی آن کار می کنم انقدر بزرگ شده که حدود 8 دقیقه کامپایل آن به جاوااسکریپت زمان از ما می گیرد.
با استفاده از Distribute Build شما می توانید فرایند کامپایل برنامه GWT خود را برروی چندین ماشین پخش کنید و هر ماشین وظیفه کامپایل یک یا چند permutation را داشته باشد.
فرایند کامپایل برنامه های GWT سه مرحله دارد:
  1. Precompile
  2. CompilePerms
  3. Link
هر کدام از این مراحل توسط یک کلاس پیاده سازی شده اند و در کتابخانه های GWT قرار دارند و بعنوان دستور در command line قابل استفاده می باشند.
دستور Precompile و Link باید برروی ماشین اصلی (build server) که وظیفه مدیریت کامپایل را بر عهده دارد انجام شود ولی هر کدام از permutation می تواند توسط دستور CompilePerms برروی یک ماشین صورت پذیرد.
برای هر سه دستورباید بعنوان آرگومان ( -workDir) یک دایرکتوری مشترک معرفی کرد. این دایرکتوری نقش مهمی در فرایند کامپایل بر عهده دارد دستورات ، خروجی های خود را درون این دایرکتوری مشترک قرار می دهند و همچنین وروردی های خود را از این دایرکتوری دریافت می کنند.
در محله اول دستور Precompile نام ماژول GWT را بعنوان ورودی دریافت کرده و بعنوان خروجی فایل precompilation.ser را درون دایرکتوری مشترک قرار می دهد.


 java -cp ... com.google.gwt.dev.Precompile com.google.gwt.sample.hello.Hello \


    -workDir work
در گام بعدی دستور CompilePerms نام ماژول و لیست شماره permutation هایی که باید کامپایل کند را بعنوان آرگومان دریافت کرده و نتیجه فرایند کامپایل را درون دایرکتوری مشترک قرار می دهد (شماره permutation  ها از 0 شروع می شود و تعداد آنها می توان از فایل permCount.txt که در دایرکتوری مشترک قرار دارد بدست آورد ).


  java -cp ... com.google.gwt.dev.CompilePerms com.google.gwt.sample.hello.Hello \
   
-workDir work
   
-perms 0
  java
-cp ... com.google.gwt.dev.CompilePerms com.google.gwt.sample.hello.Hello \
   
-workDir work
   
-perms 1
ودر مرحله آخر دستور Link تمامی permutation هایی که درون دایرکتوری مشترک قرار دارد را ترکیب کرده و خروجی نهایی را می سازد.

  java -cp ... com.google.gwt.dev.Link com.google.gwt.sample.hello.Hello \
   
-workDir work
   
-war www
   
-extra aux
البته مطمئنا در عمل این فرایند پیاده سازی دشواری خواهد داشت ولی بدلیل اینکه برای پروژه ای که من برروی آن کار می کنم ضروری است مطمئنا ارزش پیاده سازی دارد و پیاده سازی آن با استفاده از ant و یک build server می تواند انجام شود.

مطالب مرتبط:

GWT CodeSplitting

قابلیت GWT Java to JavaScript Compiler

GWT Java to JavaScript Compiler


شاد باشید.