This Banner is For Sale !!
Get your ad here for a week in 20$ only and get upto 15k traffic Daily!!!

Java for web frontend developers, part 1 : generating a simple project

Disclaimer: Initially this text has been revealed by me on I republish it right here with their permission.

It appears to be like like 15 years of GWT are coming to the top, and moreover that internet improvement has dramatically modified since 2006. There’s now no chaos of conflicting browser implementations that require to run a number of permutations every. On the similar time trendy internet improvement frameworks are removed from preferrred. As an illustration, a really robust benefit of GWT was the ecosystem round Maven – the steadiness and value of this answer was unbelievable, particularly when large groups labored on massive tasks.

Google, the primary developer of GWT, left the venture and began J2CL, the successor of GWT, which takes the easiest practices to a brand new degree. Their documentation calls it out as being utilized in many excessive efficiency tasks akin to Gmail, Inbox, Docs, Slides, and Calendar.

Initially J2CL was developed for use within the Bazel surroundings. After a number of years of laborious work the group, led by Colin Alworth, launched the primary public J2CL model for Maven – J2CL Maven plugin.

So let’s check out what it’s and the way it works.

J2CL is accountable for just one job – to transpile a set of Java lessons right into a set of JavaScript information.

Google’s Closure Compiler is accountable for merging this set of javascripts into one executable JS script, its optimization and minification.

Closure Compiler is extraordinarily environment friendly in minification and optimization of the JavaScript, it merely has no opponents.

Let’s begin from a easy one module utility. Fortunately for us, we will generate it from a pre-build archetype. Obtain the archetype in the event you don’t have it:

mvn org.apache.maven.plugins:maven-dependency-plugin:get 
Enter fullscreen mode

Exit fullscreen mode

Now we will generate a easy utility:

mvn archetype:generate -DarchetypeGroupId=com.vertispan.j2cl.archetypes 
Enter fullscreen mode

Exit fullscreen mode

Let’s check out the end result:

├── pom.xml
└── src
    ├── primary
       ├── java
          └── org
              └── treblereel
                  └── j2cl
                      └── App.native.js
       └── webapp
           ├── WEB-INF
              └── internet.xml
           ├── css
              └── simpleapp.css
           └── index.html
    └── take a look at
        └── java
            └── org
                └── treblereel
                    └── j2cl
Enter fullscreen mode

Exit fullscreen mode

– is a place to begin of our utility and there’s one level I’ve to focus on under.

– App.native.js used to specify begin our utility to the Closure Compiler, as a result of it is aware of nothing about it. Utilization of native.js is a really massive subject and a separate article may be written about it.

– is only a J2CL-compatible unit take a look at that runs in HtmlUnit, it’s additionally doable to make use of ChromeDriver to run it in an actual browser however it takes longer.

– pom.xml – right here the one attention-grabbing half for us is the j2cl-maven-plugin part. For now it comprises solely the <compilationLevel> declaration used to set which degree of optimization we’re going to use in the course of the compilation of the venture. ADVANCED is probably the most environment friendly one, so Closure Compiler does aggressive renaming, useless code removing, world inlining and so forth. However in some instances Closure Compiler wants our assist and care – we now have to declare which properties or strategies shouldn’t be eliminated or renamed. BUNDLE is much less strict and higher appropriate for improvement as a result of every compilation spherical takes much less time in comparison with ADVANCED.

j2cl-maven-plugin permits us to run our utility within the improvement mode with build-in scorching code reload and supply map debug. To start out devmode, run the next command within the terminal:

mvn j2cl:watch
When the appliance began, run the next command within the second terminal:

mvn jetty:run
There isn’t any must run mvn clear every time as a result of J2CL will recompile every little thing from scratch, and we will reuse the outcomes from the earlier run. Furthermore, there may be an choice to make use of world cache between a number of tasks to cut back compilation time.

To construct .warfare we should always run mvn bundle, there may be nothing new right here, every little thing is fairly acquainted to GWT builders.


  • GWT modules are gone, sure, no extra modules. So J2CL will attempt to compile direct and transitive dependencies from pom.xml, that’s the reason we should always set supplied scope to annotation processors and shade them.
  • GWT.create gone as nicely
  • GWT turbines are gone, now we should always use APT-based turbines.
  • What about GWT elements and widgets we used earlier than ? Most of them have been ported to J2CL.
  • Does @GwtIncompatible work? Sure, it’s nonetheless right here.

Proper now we’re targeted on migration of our present tasks from GWT2 to J2CL. There are numerous libraries which were migrated to J2CL and plenty of different libraries assist each GWT2 and J2CL. I would like to focus on elemental2-* wrappers, DominoKit, Nalu, and plenty of others.
GWT2 has been ported because the GWT Challenge which is a set of migrated modules. The Errai venture, as soon as a very talked-about dependency injection framework, is the core part of functions we use internally. Errai has been re-implemented because the Crysknife venture.

Within the upcoming posts I will tackle a number of subjects:

  • Current libraries and frameworks which are J2CL-compatible
  • Defines – propagate variables to J2CL
  • How we will enhance generated code with native.js
  • Externs – why do we want them and write our personal externs
  • Semi-reflection
  • Interoperability with TS
  • And possibly many extra

For those who like my articles, be happy to affix GWT and J2CL channels, comply with me on Twitter, LinkedIn or GitHub and even assist me on Patreon or Stripe.

The Article was Inspired from tech community site.
Contact us if this is inspired from your article and we will give you credit for it for serving the community.

This Banner is For Sale !!
Get your ad here for a week in 20$ only and get upto 10k Tech related traffic daily !!!

Leave a Reply

Your email address will not be published. Required fields are marked *

Want to Contribute to us or want to have 15k+ Audience read your Article ? Or Just want to make a strong Backlink?