Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Search
Yu Watanabe
March 07, 2015
Technology
0
31
あなたのプロジェクトが気軽にJavaをバージョンアップするために必要なこと
Yu Watanabe
March 07, 2015
Tweet
Share
More Decks by Yu Watanabe
See All by Yu Watanabe
JUnitテストをCI環境で並列で実行する方法とその速度, スケーラビリティ
nabedge
4
2k
クラウド時代だからSpring-Retryフレームワーク
nabedge
0
49
ツール比較しながら語るO/RマッパーとDBマイグレーション
nabedge
0
68
JavaでWebサービスを作り続けるための戦略と戦術
nabedge
0
42
サーバーサイドな人がフロントエンド技術と仲良くするはじめの一歩
nabedge
0
35
Selenium再入門
nabedge
0
36
Webエンジニアがスタートダッシュをキメるためのローカル開発環境の勘所
nabedge
0
38
テストゼロからイチに進むための戦略と戦術
nabedge
0
44
jOOQってなんて読むの?から始めるSpringBootとO/Rマッパーの世界
nabedge
0
77
Other Decks in Technology
See All in Technology
20241220_S3 tablesの使い方を検証してみた
handy
4
620
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
230
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
560
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
株式会社ログラス − エンジニア向け会社説明資料 / Loglass Comapany Deck for Engineer
loglass2019
3
32k
【re:Invent 2024 アプデ】 Prompt Routing の紹介
champ
0
150
ブラックフライデーで購入したPixel9で、Gemini Nanoを動かしてみた
marchin1989
1
540
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
560
C++26 エラー性動作
faithandbrave
2
770
DUSt3R, MASt3R, MASt3R-SfM にみる3D基盤モデル
spatial_ai_network
2
190
Qiita埋め込み用スライド
naoki_0531
0
5.1k
Amazon VPC Lattice 最新アップデート紹介 - PrivateLink も似たようなアップデートあったけど違いとは
bigmuramura
0
200
Featured
See All Featured
Fireside Chat
paigeccino
34
3.1k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Code Review Best Practice
trishagee
65
17k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
66k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Code Reviewing Like a Champion
maltzj
520
39k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
28
900
Building an army of robots
kneath
302
44k
Transcript
あなたのプロジェクトが 気軽にJavaをバージョンアップする ために必要なこと 第10回 #渋谷Java 2015-‐3-‐7(Sat)
自己紹介 • 渡辺 • (株)ビズリーチ • @nabedge
• h8p://mixer2.org • h8p://nabedge.blogspot.jp 2
質問 • Java8ですか? • Java7? • Java6?
• Java5? • まさかの古代言語? 3
なぜ古いJavaを使い続けるのか? • バージョンを上げて何かあったら嫌だから – 何かあったときにもとの古いJDK/JREに戻すのが 面倒くさい – テストをやりなおすコスト •
「全てのサーバのJDKのバージョン上げて」と いうとインフラ担当者が嫌な顔をするから。 – とにかく上司を説得するのが面倒くさいから。 4
• 「がんばってJava5,6,7 から Java8にバージョン アップだ!」 – N年後 • 「もうJava11が出てるのにまだJava8使ってるの?」
• 同じやり方でやれば行き着く先は同じ。 – 大切なのは「バージョンアップする」ことではなくて 「バージョンアップしやすくする」こと。 5
JREとJDK • JDK=開発に必要なもの – ソースコードをコンパイルする – ローカル開発環境とJenkinsの中にあるもの • JRE=運用に必要なもの
– コンパイル済みのバイナリを実行する – テスト環境/本番環境の中にあるもの 6
JREとJDK • 「とりあえず全サーバにJDKが入っている」 のは何故? – A: 大は小を兼ねるから。 – A:
JDK/JREのインストールをインフラ担当者に任 せてしまうから。 – 実はこのあたりから「バージョンアップできない Java」が始まる 7
JDKの切り替えなんて簡単 8 Eclipseの設定ダイアログ
JDKの切り替えなんて簡単 9 Jenkinsの管理画面
JREの切り替えはどうする? • JREを気軽にバージョンアップするためには? • なんかあったらすぐ元に戻すためには? 10
去年のJJUG 11 当時の資料 h8p://www.slideshare.net/nabedge/java-‐the-‐twelve-‐factor-‐app
h8p://12factor.net 12
突然CM入れてみたりとか 13 Javaな人、絶賛採用中 h8p://www.bizreach.co.jp/recruit/
第2章「依存関係」の最後の段落 Twelve-‐Factor Appは、いかなるシステムツールの暗黙的な存在にも依存し ない。例として、アプリケーションからImageMagickやcurlを使う場合がある。 これらのツールはほとんどのシステムに存在するだろうが、アプリケーション が将来に渡って実行され得るすべてのシステムに存在するかどうか、あるい は将来のシステムでこのアプリケーションと互換性のあるバージョンが見つ かるかどうかについては何の保証もない。アプリケーションがシステムツー ルを必要とするならば、そのツールをアプリケーションに組み込むべきである。 14
• 「アプリケーションがシステムツールを必要と するならば、そのツールをアプリケーションに 組み込むべきである」 • 「アプリケーションがJREを必要とするならば、 JREをアプリケーションに組み込むべきであ る」 15
• 実際のところどうすべきか? – アプリにJREを組み込んでリリース物を作る – JREにアプリを組み込んでリリース物を作る 16
Java1.4からその機能はある 17 1.4, 5,6,7,8 全てほぼ同じことが書いてある
公式マニュアルにはっきり書かれている 1. $JAVA_HOME=/var/lib/jre1.x.x_nn だと して 2. $JAVA_HOME/lib/ext の配下は自分で 作ったjarを置いてもいい場所ですよ
1. そこは自動的にクラスパスに含まれます よ 18
前提 • Tomcatはインストール型ではなく ライブラリ型=組み込みtomcat=を使え。 19
組み込みTomcatとは • Tomcat 7.0.1x (2011年初頭)くらいか ら安定リリース • tomcat-‐embed-‐core-‐7.0.x.jar
• tomcat-‐embed-‐logging-‐log4j-‐7.0.x.jar 20
public stacc void main(String[] args) { Tomcat tomcat =
new Tomcat(); tomcat.setPort(8080); tomcat.addWebapp("/”, new File(“/var/webAppDir) .getAbsolutePath()); tomcat.start(); tomcat.getServer().await(); } 21
ビルド方法 1. 自作のアプリをjarに固めておく 2. 使用するフレームワークやライブラリのjarも 集めておく 例:mvn dependency:copy-‐dependencies
3. tar zxf jre-‐”N”uXX-‐linux-‐x64.tar.gz 4. cp [1,2のjar群] jreNuXX/lib/ext/ 5. jreNuXX/配下を再びzipかtarballに固める 22
リリース&実行方法 1. 前頁のビルド成果物をサーバ上で解凍する 2. export JAVA_HOME=解凍先ディレクトリ 3. $JAVA_HOME/bin/java
com.example.YourMain ※ -‐classpath=… を指定する必要は無い。 23
JREのバージョンup/down方法 • ビルドするときにjreのtarballのバージョンを変 えるだけ。 – これならインフラさんに迷惑かける必要ないよね。 24
まとめ • JDKとJREはちゃんと区別して考える。 • 全ての普通のjarに固める。 • APサーバは組み込みで。
– tomcat-‐embed, je8y… • JREもろともリリースせよ。 – ライブラリのjarの差し替えと同じ間隔でJREも差し 替えられるように。 – 実は古来から存在する普通の技です。 25
ありがとうございました! 26