heroku(java編)
前回でruby@herokuできるようになったので次のjavaに進む。
環境はcygwin上でmavenを使う - 三次元日誌参照。
heroku login
$ heroku login Enter your Heroku credentials. Email: ousttrue@gmail.com Password:
rubyのときと同じ
プロジェクト作成
せっかくなのでmavenを使う
$ mvn archetype:create -DgroupId=heroku -DartifactId=sample $ cd sample/ $ find . . ./pom.xml ./src ./src/main ./src/main/java ./src/main/java/heroku ./src/main/java/heroku/App.java ./src/test ./src/test/java ./src/test/java/heroku ./src/test/java/heroku/AppTest.java
とりあえずビルド、実行してみる
$ mvn compile
$ java -classpath target/classes heroku.App
Hello World!
Herokuサンプル化する
とりあえずクリア
$ mvn clean $ rm -rf src/main/java/heroku $ rm -rf src/test/java/heroku
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.*; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.*; public class HelloWorld extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().print("Hello from Java!\n"); } public static void main(String[] args) throws Exception{ Server server = new Server(Integer.valueOf(System.getenv("PORT"))); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); context.setContextPath("/"); server.setHandler(context); context.addServlet(new ServletHolder(new HelloWorld()),"/*"); server.start(); server.join(); } }
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <version>1.0-SNAPSHOT</version> <artifactId>helloworld</artifactId> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>7.4.5.v20110725</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>appassembler-maven-plugin</artifactId> <version>1.1.1</version> <executions> <execution> <phase>package</phase> <goals><goal>assemble</goal></goals> <configuration> <assembleDirectory>target</assembleDirectory> <programs> <program> <mainClass>HelloWorld</mainClass> <name>webapp</name> </program> </programs> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
build
$ mvn install
実行してみる。
$ PORT=8080 ./target/bin/webapp
asseblerプラグインでtarget/bin/webappが出力されている。
実行するのには環境変数PORTが必要(HelloWorld.java:16)。
http://localhost:8080
にアクセスしてみる。
C-c
で停止
foremanで実行する
Procfile
web: sh target/bin/webapp || >|sh| $ foreman start 20:43:37 web.1 | started with pid 9016 20:43:38 web.1 | 2011-11-27 20:43:38.427:INFO::jetty-7.4.5.v20110725 20:43:38 web.1 | 2011-11-27 20:43:38.473:INFO::started o.e.j.s.ServletContextHandler{/,null} 20:43:38 web.1 | 2011-11-27 20:43:38.512:INFO::Started SelectChannelConnector@0.0.0.0:5000 STARTING
http://localhost:5000
にアクセスしてみる。
今度はport5000だった。
C-C
で停止。
gitに登録
.gitignore
$ echo target > .gitignore $ git init $ git add . $ git commit -m "init"
herokuアプリ作成
$ heroku create --stack cedar
herokuにアップ
$ git push heroku master
ブラウザで開く
$ heroku open
以上で、heroku java編終わり。
ローカルのforemanで動作確認するところを押さえれば問題ないようだ。