Made by individuals for the good of Java EE and our industry.
Checkout the demo application here: http://ec2-54-174-245-236.compute-1.amazonaws.com/ee-central/
Hit http://ec2-54-174-245-236.compute-1.amazonaws.com/ee-central/api/cache/clear to clear up cache.
Changes in this source code will automatically update the demo application.
You will need a jcpevangelists github access token. You can use this value as a environment value (github_atoken) or a system property (io.github.token). If both are set, io.github.token will be used.
You will also need a Twitter OAuth Token. Visit Twitter Application Tokens for it. Export the following environment variables based on the tokens from Twitter:
project_twitter_oauth_consumer_key
project_twitter_oauth_consumer_secret
project_twitter_oauth_access_token
project_twitter_oauth_access_token_secret
For now, since we’re not using Twitter integration, they just have to be not-blank.
If you don’t have a token, ask Thiago for it.
Once you have the token ready, simply run mvn clean install tomee:run
. Your server will be available at
http://localhost:8080/
This application heavily depends on node.js and gulp to build all the
static resources. These tools will execute tons of actions not yet available in the java world; at least not as handy
as available on node.js. The good news is that we don’t need to worry about a thing. It will feel like any regular
maven project. mvn clean install tomee:run
will perform all the heavy lifting. It downloads the dependencies
and executes node.js, gulp and the tomee server.
You may specify eecentral_config_root
maven property to point to an alternative github repository.
This is in case you want to check your changes before sending pull request to the main config repository.
To aid in development and customize the application for typical development environment, enable devel
maven profile.
This will turn off caching and enable some alternatives that tweak the application for development.
In order to preview your local html pages, you may use eecentral_devel_pages_root
maven property to point to a folder on you disk.
See ServiceProjectDevelSpecializer.groovy for more info.
Front-end developers don’t need to restart servers. In fact, front-end developers don’t like to waste a single second waiting for a JS change to be reflected on a web application. This is what make web development fun.
Our application uses Jade, Sass, Autoprefixer, Sprity, Bower, JsLint, UglifyJs, SourceMaps. Obviously, we have a lot of work to do before making a static change visible in the web site.
In order to make it automatic, run mvn frontend:gulp
in another terminal. It will trigger the default gulp task,
which will watch for changes on src/main/static/ and updates the running tomee instance accordingly as soon as a
static change is detected.
Furthermore, if you will most probably want to disable building frontend in usual backend development lifecycle.
In that case, add -Dfrontend.skip=true
to usual maven commands.
For example, to rebuild and restart the app in tomee (while the frontend task is running in background), run: mvn -Dfrontend.skip=true install tomee:run
.
tveronezi@ubatuba:ee-central$ mvn frontend:gulp [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building JavaEE :: IO :: Website 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- frontend-maven-plugin:0.0.26:gulp (default-cli) @ ee-central --- [INFO] Running 'gulp.js --no-color' in /home/tveronezi/Documents/development/sources/ee-central/src/main/static [INFO] [10:49:45] Using gulpfile ~/Documents/development/sources/ee-central/src/main/static/gulpfile.js [INFO] [10:49:45] Starting 'sync group6:0'... [INFO] [10:49:45] Starting 'sync group5:0'... [INFO] [10:49:45] Starting 'clean'... [INFO] [10:49:45] Finished 'clean' after 38 ms [INFO] [10:49:45] Finished 'sync group5:0' after 39 ms [INFO] [10:49:45] Starting 'sync group5:1'... [INFO] [10:49:45] Starting 'bower'... [INFO] [10:49:45] Using cwd: /home/tveronezi/Documents/development/sources/ee-central/src/main/static [INFO] [10:49:45] Using bower dir: ./bower_components [INFO] [10:49:47] Finished 'bower' after 2.24 s [INFO] [10:49:47] Finished 'sync group5:1' after 2.24 s [INFO] [10:49:47] Starting 'sync group5:2'... [INFO] [10:49:47] Starting 'jade'... [INFO] [10:49:47] Finished 'jade' after 447 ms [INFO] [10:49:47] Finished 'sync group5:2' after 448 ms [INFO] [10:49:47] Starting 'sync group5:3'... [INFO] [10:49:47] Starting 'sync group2:0'... [INFO] [10:49:47] Starting 'copy-images'... [INFO] [10:49:47] Finished 'copy-images' after 44 ms [INFO] [10:49:47] Finished 'sync group2:0' after 44 ms [INFO] [10:49:47] Starting 'sync group2:1'... [INFO] [10:49:47] Starting 'sprites'... [INFO] [10:49:48] Finished 'sprites' after 227 ms [INFO] [10:49:48] Finished 'sync group2:1' after 229 ms [INFO] [10:49:48] Starting 'images'... [INFO] [10:49:48] Finished 'images' after 14 μs [INFO] [10:49:48] Finished 'sync group5:3' after 277 ms [INFO] [10:49:48] Starting 'sync group5:4'... [INFO] [10:49:48] Starting 'sync group0:0'... [INFO] [10:49:48] Starting 'sync group1:0'... [INFO] [10:49:48] Starting 'sass'... [INFO] [10:49:48] Finished 'sass' after 88 ms [INFO] [10:49:48] Finished 'sync group1:0' after 89 ms [INFO] [10:49:48] Starting 'sync group1:1'... [INFO] [10:49:48] Starting 'autoprefixer'... [INFO] [10:49:48] Finished 'autoprefixer' after 146 ms [INFO] [10:49:48] Finished 'sync group1:1' after 146 ms [INFO] [10:49:48] Starting 'sync group1:2'... [INFO] [10:49:48] Starting 'css-concat'... [INFO] [10:49:48] Finished 'css-concat' after 13 ms [INFO] [10:49:48] Finished 'sync group1:2' after 13 ms [INFO] [10:49:48] Starting 'css-build'... [INFO] [10:49:48] Finished 'css-build' after 3.52 μs [INFO] [10:49:48] Finished 'sync group0:0' after 249 ms [INFO] [10:49:48] Starting 'sync group0:1'... [INFO] [10:49:48] Starting 'css-third-party'... [INFO] [10:49:48] Finished 'css-third-party' after 23 ms [INFO] [10:49:48] Finished 'sync group0:1' after 23 ms [INFO] [10:49:48] Starting 'sync group0:2'... [INFO] [10:49:48] Starting 'css-third-party-resources'... [INFO] [10:49:48] Finished 'css-third-party-resources' after 12 ms [INFO] [10:49:48] Finished 'sync group0:2' after 16 ms [INFO] [10:49:48] Starting 'css'... [INFO] [10:49:48] Finished 'css' after 14 μs [INFO] [10:49:48] Finished 'sync group5:4' after 292 ms [INFO] [10:49:48] Starting 'sync group5:5'... [INFO] [10:49:48] Starting 'sync group3:0'... [INFO] [10:49:48] Starting 'sync group4:0'... [INFO] [10:49:48] Starting 'lint'... [INFO] [10:49:48] assets/js/services-app.js [INFO] [10:49:48] assets/js/app.js [INFO] [10:49:48] assets/js/controllers-contributors.js [INFO] [10:49:48] assets/js/controllers-project-details.js [INFO] [10:49:48] assets/js/controllers-project-highlight.js [INFO] [10:49:48] assets/js/controllers-projects-carousel.js [INFO] [10:49:48] assets/js/controllers-projects.js [INFO] [10:49:48] assets/js/controllers-twitter.js [INFO] [10:49:48] Finished 'lint' after 127 ms [INFO] [10:49:48] Finished 'sync group4:0' after 129 ms [INFO] [10:49:48] Starting 'sync group4:1'... [INFO] [10:49:48] Starting 'copy-js'... [INFO] [10:49:48] Finished 'copy-js' after 23 ms [INFO] [10:49:48] Finished 'sync group4:1' after 24 ms [INFO] [10:49:48] Starting 'sync group4:2'... [INFO] [10:49:48] Starting 'uglify'... [INFO] [10:49:48] Finished 'uglify' after 321 ms [INFO] [10:49:48] Finished 'sync group4:2' after 322 ms [INFO] [10:49:48] Starting 'js-build'... [INFO] [10:49:48] Finished 'js-build' after 6.04 μs [INFO] [10:49:48] Finished 'sync group3:0' after 481 ms [INFO] [10:49:48] Starting 'sync group3:1'... [INFO] [10:49:48] Starting 'js-third-party'... [INFO] [10:49:48] Finished 'js-third-party' after 8.4 ms [INFO] [10:49:48] Finished 'sync group3:1' after 9.05 ms [INFO] [10:49:48] Starting 'js'... [INFO] [10:49:48] Finished 'js' after 4.72 μs [INFO] [10:49:48] Finished 'sync group5:5' after 493 ms [INFO] [10:49:48] Starting 'build'... [INFO] [10:49:48] Finished 'build' after 6.61 μs [INFO] [10:49:48] Finished 'sync group6:0' after 3.79 s [INFO] [10:49:48] Starting 'sync group6:1'... [INFO] [10:49:48] Starting 'copy-to-target'... [INFO] [10:49:49] Finished 'copy-to-target' after 82 ms [INFO] [10:49:49] Finished 'sync group6:1' after 82 ms [INFO] [10:49:49] Starting 'default'... [INFO] [10:49:49] Finished 'default' after 43 ms
We have two types of tests: backend and frontend. The frontend testing
is somewhat special because it uses karma. It’s transparent for
the devepolers because both tests are triggered by the same mvn clean install
.
Sometimes we are interested on frontend testing only. We can do it by executing 'mvn frontend:karma'.
tveronezi@ubatuba:ee-central$ mvn frontend:karma [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building JavaEE :: IO :: Website 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- frontend-maven-plugin:0.0.26:karma (default-cli) @ ee-central --- [INFO] Running 'karma start karma.conf.js --no-colors' in /home/tveronezi/Documents/development/sources/ee-central/src/main/static [INFO] 08 10 2015 10:07:33.166:WARN [karma]: No captured browser, open http://localhost:9876/ [INFO] 08 10 2015 10:07:33.177:INFO [karma]: Karma v0.13.10 server started at http://localhost:9876/ [INFO] 08 10 2015 10:07:33.183:INFO [launcher]: Starting browser PhantomJS [INFO] 08 10 2015 10:07:33.421:INFO [PhantomJS 1.9.8 (Linux 0.0.0)]: Connected on socket 69XcpjL1trQ7xnP6AAAA with id 41615709 PhantomJS 1.9.8 (Linux 0.0.0): Executed 1 of 1 SUCCESS (0.039 secs / 0.009 secs)
The default browser is PhantonJS. In order to debug with the help of a real browser, uncomment this line in karma.conf.js
// start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: [ // 'Chrome', // uncomment me for local unit testing [not in a headless server] 'PhantomJS' ],
When you execute mvn frontend:karma
, a browser window will popup.
The content of this application is based on another github project: https://github.com/jcpevangelists/ee-central.config.
The files under https://github.com/jcpevangelists/ee-central.config/tree/master/specs configure the projects listed on http://ec2-54-174-245-236.compute-1.amazonaws.com/ee-central/docs.
This file - https://github.com/jcpevangelists/ee-central.config/blob/master/pages/javaee_guardians.adoc - is the
one that is shown in the home page - http://ec2-54-174-245-236.compute-1.amazonaws.com/ee-central/. The other
files go to the page
route. For example, https://github.com/jcpevangelists/ee-central.config/blob/master/pages/page_a.adoc
goes to http://ec2-54-174-245-236.compute-1.amazonaws.com/ee-central/page/page_a.adoc.
Updates on https://github.com/jcpevangelists/ee-central.config/ are automatically reflected on the demo site.