- OSX 10.9
- Google App Engine 1.9.5
- Java 1.7
- Maven 3.1
- IntelliJ Idea 13
- Objectify 5
Note: example application is located on github.
The first issue you may encounter as a OSX user is that GAE requires Java 1.7 and you might still be on Java 1.6 - DO NOT get the latest Java 1.7 (which is currently 1.7.0_60) because of bug JDK-8025876. Instead select Java 1.7.0_25 - there has been much discussion about this issue, here is an example from Stack Overflow.
You should be able to obtain results similar to this:
gsc@duckman:72>java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
Now that your system is working on Java 1.7, you should ensure that maven is aware of the update. Simply updating $JAVA_HOME was not sufficient and I also needed to tweak .mavenrc - once again Stack Overflow to the rescue.
You should be able to obtain results similar to this:
gsc@duckman:73>mvn -v
Apache Maven 3.1.1 (NON-CANONICAL_2013-11-17_20-36_gsc; 2013-11-17 20:36:09-0800)
Maven home: /Users/gsc/local/apache-maven-3.1.1
Java version: 1.7.0_25, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.9.3", arch: "x86_64", family: "mac"
At this point, java and maven are ready. If you have not already done so, download the latest Google App Engine SDK (currently 1.9.5) and install it on your system. Point to the GAE installation with $APPENGINE_HOME
Google provides the guestbook tutorial which has been updated recently (note the EAR directory in addition to the original WAR). The application skeleton is generated from maven with features incrementally added through the tutorial. Instructions are reliable until until runtime when Google shows the old (now wrong) command to start/deploy on a local development server. Assuming you have this directory structure:
Google provides the guestbook tutorial which has been updated recently (note the EAR directory in addition to the original WAR). The application skeleton is generated from maven with features incrementally added through the tutorial. Instructions are reliable until until runtime when Google shows the old (now wrong) command to start/deploy on a local development server. Assuming you have this directory structure:
gsc@duckman:89>ll
total 32
drwxr-xr-x 8 gsc staff 272 Jun 1 10:21 ./
drwxr-xr-x 7 gsc staff 238 Jun 1 10:38 ../
-rw-r--r-- 1 gsc staff 106 Jun 1 10:21 .gitignore
-rw-r--r-- 1 gsc staff 121 Jun 1 10:21 README.md
drwxr-xr-x 6 gsc staff 204 Jun 1 11:47 guestbook-ear/
drwxr-xr-x 6 gsc staff 204 Jun 1 11:47 guestbook-war/
-rw-r--r-- 1 gsc staff 583 Jun 1 10:21 guestbook.iml
-rw-r--r-- 1 gsc staff 1009 Jun 1 10:21 pom.xml
The correct command to start/deploy on a local development server is:
gsc@duckman:90>mvn -pl guestbook-ear appengine:devserver
When you see "[INFO] INFO: Dev App Server is now running" then you should be able to visit the guestbook application at http://localhost:8080 and the GAE console is on http://localhost:8080/_ah/admin (guestbook screenshot below)
At this point, you have a simple, working application which you can compile and deploy using command line arguments. Now I bring IntelliJ 13 into the mix.
First you must configure IntelliJ for your freshly installed Java 1.7 - start IntelliJ and from the splash panel select "Configure"->"Project Defaults"->"Project Structure" and the goal is a display like below.
First you must configure IntelliJ for your freshly installed Java 1.7 - start IntelliJ and from the splash panel select "Configure"->"Project Defaults"->"Project Structure" and the goal is a display like below.
Now we need a project. You can continue to use the original guestbook application or consider my derivative version from github. If you are interested in a quick introduction to objectify then use my version.
IntelliJ can be challenging to configure, YMMV but in my experience the tutorials and help are rarely up to date even for the "ultimate" version. Once again, Stack Overflow is probably your best resource for assistance.
Ensure you have the "GAE Integration" plugin enabled. The following screenshots might help in comparing your environment from mine.
The proof is your success in being able to compile and deploy to your local development server from within IntelliJ. Attempt it now using the "make" triangle in the top right toolbar.
At this point you should now be able to work on a GAE/J application using IntelliJ (including the debugger). Only objectify remains to be explored.
The original guestbook sample application uses the DatastoreService for persistence in two spots: reading guestbook entries within guestbook.jsp and writing guestbook entries within SignGuestbookServlet.java
To use objectify I have added Greeting.java as an Entity and GreetingDao.java as a DAO. I also modified guestbook.jsp and SignGuestbookServlet.java to use the DAO (and objectify) rather than the datastore directly.
This concludes my short tour of making a small GAE project and I hope it saved you some time.
No comments:
Post a Comment