Slide 1

Slide 1 text

ϏϧυπʔϧϋϯζΦϯ "QBDIF.BWFO @gishi_yama Java Doでしょう #09 1 [2017年度開催 Mavenハンズオン資料 見本]

Slide 2

Slide 2 text

Mavenを使って、開発に必要な基本的操作・設定をひととおり体験! やること:  Mavenをダウンロードして、インストールして、動かす  Mavenを設定して、使ってみる  Mavenプラグインを使ってみる  網羅的な解説ではなく、機能をかいつまんで便利さを知る やらないこと:  Mavenプラグインを作る、制作物をMavenで公開する、etc ࠓ೔΍Δ͜ͱɺ΍Βͳ͍͜ͱ

Slide 3

Slide 3 text

・開発環境の調整
 ・ソースコードのコンパイル
 ・プロジェクトのテスト/運⽤のためのパッケージ化
 といったビルド作業の諸々のフローや設定を、⼿順化&⾃動実⾏可能にする たとえば:  開発・動作のために必要なライブラリを準備したい(依存性解決)
  コンパイル&パッケージングの前にテストを実⾏したい
  運⽤の時だけCSS/JavaScriptをMiniferしたい
  ... ⇒フローやセッティングを設定ファイルに作り、コマンドとして実⾏する
  代表例)Unix系の configure / make Ϗϧυπʔϧͱ͸

Slide 4

Slide 4 text

依存性解決に特徴のあるJavaプロジェクト⽤のビルドツール Maven Central Repository といったリポジトリサーバーから
 インターネット経由で開発・運⽤に必要なライブラリを取得し、
 プロジェクトに組み込むことが可能(パッケージマネージャ) 2004年に登場して以来、
 枯れたツールとしてデファクト
 スタンダードに(枯れすぎかも) "QBDIF.BWFO + ソースコード ライブラリ(jar) Internet プロジェクト

Slide 5

Slide 5 text

Macの⼈ ターミナル.app を起動して、mvn -version Windowsの⼈ コマンドプロンプトを起動して mvn -version
 (bash on windowsの⼈はちょっとわかりません、ごめんなさい) Linuxの⼈ 端末かコンソールを起動して mvn -version .BWFO͕ೖͬͯΔ͔ࢼ͢

Slide 6

Slide 6 text

.BWFO͕ೖͬͯΔ͔ࢼ͢ mvn -version Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T04:39:06+09:00) Maven home: /usr/local/Cellar/maven/3.5.0/libexec Java version: 1.8.0_131, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre Default locale: ja_JP, platform encoding: UTF-8 OS name: "mac os x", version: "10.12.4", arch: "x86_64", family: "mac" こんな⾵に表⽰されれば、もう⼊ってます
 バージョンは、3.x(できれば3.3以降)であれば今⽇は困らないと思います

Slide 7

Slide 7 text

すでにインストールできている⼈は、まわりの⼈のサポートをお願いします!
 MacでHomebrew使ってる⼈は brew install maven
 Linuxの⼈ は apt-get install maven や yum install maven
 WindowsでChocolatey使ってる⼈ は choco install maven
 とかの⽅がさくっと導⼊できます μ΢ϯϩʔυˍΠϯετʔϧ 上記以外の⼈は(Javaが⼊ってる前提で)
 サイトにアクセス https://maven.apache.org/ Download⇒ Binary zip か
 Binary tar.gz を
 ダウンロードしてください

Slide 8

Slide 8 text

echo %JAVA_HOME% C:\Program Files\Java\jdk1.7.0_51 μ΢ϯϩʔυˍΠϯετʔϧ インストール⽅法は、同じくMavenのサイトの「Install」で確認
 (基本的には、ダウンロードしたファイルを解凍して、パスを通す)
 Javaのパスが通っているかも確認する Windowsの⼈の例 echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home export PATH=/opt/apache-maven-3.5.0/bin:$PATH Mac/Linuxの⼈の例 ⇒必要があればshの
 profileでexport ⇒システム環境設定>環境変数>ユーザ環境変数
  PATHの値に、Mavenのbinディレクトリを設定
 (他の値がある場合は、セミコロン区切り)  もし、JAVA_HOMEがなければ、JAVA_HOMEも追加 うまくいったら、コマンドプロンプトやターミナルを開き直して、mvn -version

Slide 9

Slide 9 text

MavenでビルドできるJavaの開発プロジェクトをひな型から作成する .BWFOϓϩδΣΫτΛ࡞੒͢Δ 以降のスライドは、下のURLの⼿順で進めていきます! https://goo.gl/bU36Au mvn -B archetype:generate \ -DgroupId=com.example \ -DartifactId=mvn-app \ -Dversion=1.0 \ -DarchetypeArtifactId=maven-archetype-quickstart ⇒ プロジェクトの識別⼦(例:グループ名、パッケージ名) ⇒ プロジェクト名 ⇒ バージョン番号 ⇒ひな形

Slide 10

Slide 10 text

[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ (中略) [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.858 s [INFO] Finished at: 2017-04-21T21:18:01+09:00 [INFO] Final Memory: 15M/219M [INFO] ------------------------------------------------------------------------ .BWFOϓϩδΣΫτΛ࡞੒͢Δ ⇒ 作成成功!

Slide 11

Slide 11 text

できあがるプロジェクトディレクトリ .BWFOϓϩδΣΫτΛ࡞੒͢Δ mvn-app |-- pom.xml `-- src |-- main | `-- java | `-- App.java `-- test `-- java `-- AppTest.java Ҿ༻ɾվมɿhttps://maven.apache.org/archetypes/maven-archetype-quickstart/ ⇒ mavenプロジェクトの設定ファイル ⇒ Javaの実⾏⽤クラス ⇒ Javaのテストケース

Slide 12

Slide 12 text

デフォルトは https://maven.apache.org/archetypes/ に掲載されている。
 たとえば、maven-archetype-webapp はWebアプリの基本構成。 有志のひな形やフレームワーク⽤のひな形は、
 archetypeGroupIdとarchetypeArtifactIdを設定して使う。たとえば... Java8 -DarchetypeGroupId=pl.org.miki 
 -DarchetypeArtifactId=java8-quickstart-archetype Apache Wicket -DarchetypeGroupId=org.apache.wicket 
 -DarchetypeArtifactId=wicket-archetype-quickstart Jersey(JAX-RS) -DarchetypeGroupId=org.glassfish.jersey.archetypes
 -DarchetypeArtifactId=jersey-quickstart-webapp ͻͳܗͷҰཡ

Slide 13

Slide 13 text

Intellij IDEA、Eclipse, NetBeansなど
 お⼿元のIDEで読み込んでみましょう *%&ͰϓϩδΣΫτΛಡΈࠐΉ • NetBeans
 「プロジェクトを開く」でmvn-appフォルダを選択
 読み込まれたら、プロジェクトを右クリックして「ビルド」 • Eclipse
 「ファイル」→「インポート」→「既存Mavenプロジェクト」でフォルダを選択
 その後にプロジェクトで右クリックし、「Maven」>「プロジェクトの更新」 • IntelliJ IDEA
 「import project」でフォルダの中の pom.xmlを選択
 「Import Maven projects automatically」をチェックして続⾏

Slide 14

Slide 14 text

⇒ プロジェクトの設定 ⇒ 外部ライブラリ(jar)

Slide 15

Slide 15 text

pom.xmlファイルを書き換えることでプロジェクトを設定できる。
 (ちなみに、pom:Project Object Modelの略らしい) .BWFOϓϩδΣΫτͷઃఆ ... ... ... ... ... ... ... ... ... ... ... ... https://maven.apache.org/pom.html#What_is_the_POM プロジェクトの基本設定
 プロジェクト名やバージョン、
 組み込む外部ライブラリなど 実⾏時・パッケージング時の設定

Slide 16

Slide 16 text

+BWBͷϓϩδΣΫτʹ͢Δ ɹ org.apache.maven.plugins maven-compiler-plugin 3.1 1.8 1.8 ⇒ Javaのソースコードとコンパイルの
   バージョンを1.8にする 書き換えたら、IDEでプロジェクトをビルドすると、Java8のプロジェクトになります。

Slide 17

Slide 17 text

+6OJUͷϥΠϒϥϦΛมߋ͢Δ junit junit 4.12 test ⇒ JUnitライブラリのバージョンを4.12にする 書き換えたら、IDEでプロジェクトを
 ビルドすると...
 JUnitがバージョンアップして、
 Hamcrest(依存ライブラリ)が追加される!

Slide 18

Slide 18 text

ςετΫϥεΛॻ͖׵͑Δ package com.example; import org.junit.Test; import static org.junit.Assert.assertTrue; public class AppTest { @Test public void testApp() { assertTrue(true); } } JUnit3のクラスから、JUnit4のクラスに書き換えて、テストを実⾏してみましょう。

Slide 19

Slide 19 text

EFQFOEFODZ

Slide 20

Slide 20 text

プロジェクトが依存する外部ライブラリの設定。
 タグの中に、ライブラリごとにタグを
 列挙していく。 .BWFOͷEFQFOEFODZ  ⇒ ライブラリのグループ名(パッケージ名の場合も多い)  ⇒ ライブラリ名
  ⇒ バージョン番号
  ⇒ ライブラリが必要なタイミング dependencyで追加されるライブラリが他のライブラリを必要としている時、
 デフォルトではプロジェクトに⾃動的に導⼊される。
 (AというライブラリにBが必要であれば、プロジェクトにはAB両⽅⼊る)

Slide 21

Slide 21 text

スコープの種類
 compile :コンパイル時に必要
 runtime :実⾏時のみ必要
 provided:実⾏時のみ必要
  (JDKやサーバ実⾏環境が提供してくれる)
 system :常に必要
  (systemPathの場所のローカルなjarファイルを組み込む)
 test :テスト時のみ必要
 import :他のpomファイルの内容を読み込む .BWFOͷEFQFOEFODZ

Slide 22

Slide 22 text

⼀般的にdependencyに追加できる外部ライブラリは
 Maven Central Repositoryで公開されている。 mavenプロジェクトがコンパイルやパッケージングされる場合に、
 pom.xmlに記載されたdependencyの情報を元に、外部ライブラリに必要な
 データがリポジトリからローカルにダウンロードされ、利⽤できるようになる。 リポジトリの内容は https://search.maven.org/ や
 https://mvnrepository.com/ などから検索できる。 ダウンロード先(ローカルリポジトリ)は、
 デフォルトでは、ホームフォルダの.m2/repository に設定されている。 EFQFOEFODZͱϦϙδτϦ なんか調⼦が悪くなったら、.m2/repositoryを削除すると改善されたりする!

Slide 23

Slide 23 text

groupIdやartifactId、
 もしくはピリオドでつなげたもの を⼊⼒して検索。
 例えば今回は、junit.junit

Slide 24

Slide 24 text

クリック

Slide 25

Slide 25 text

プロジェクトに導⼊したいときの
 dependencyの内容。
 pom.xmlにコピペできる この外部ライブラリ⾃体のpom.xmlの情報。
 他のライブラリへの依存状態などが確認できる。

Slide 26

Slide 26 text

ϓϥάΠϯ

Slide 27

Slide 27 text

Mavenによるパッケージングや操作で使えるようにするプラグインの設定。
 タグやタグの中に、
 プラグインごとにタグを列挙していく。 .BWFOͷϓϥάΠϯ  ⇒ プラグインのグループ名(パッケージ名の場合も多い)  ⇒ プラグイン名
  ⇒ バージョン番号
  ⇒ プラグインの設定 pluginは、ゴール(実⾏指⽰)がコマンドで指定されることにより動作する。 ※Mavenのデフォルトpluginは、pom.xmlに設定の記載がなくても
  動作させることもできる。

Slide 28

Slide 28 text

.BWFOͷσϑΥϧτϓϥάΠϯ https://maven.apache.org/plugins/index.html
 (これ以外のプラグインも、Central Repositoryで検索できます)

Slide 29

Slide 29 text

ローカルサーバの起動や、運⽤サーバにアップロード出来るプラグインもある
 (前者は、プラグイン起動よりも組み込み型の⽅が最近は流⾏っている気もする) 8FCΞϓϦέʔγϣϯͷ৔߹

Slide 30

Slide 30 text

http://samaxes.github.io/minify-maven-plugin/
 cssとかjavascriptをminifierしてくれる ݸਓతʹ޷͖ͳϓϥάΠϯ

Slide 31

Slide 31 text

ϑΣʔζͱΰʔϧ

Slide 32

Slide 32 text

mavenは、フェーズやゴール(プラグインの起動指⽰)で動作する。 たとえば… mvn オプション ゴール フェーズ mvn test 
 ⇒ コンパイルした後、プロジェクトをテストする(JUnit) mvn package 
 ⇒ コンパイル・テストした後に、jar(war)にプロジェクトをパッケージ mvn versions:display-dependency-updates
 ⇒ versionsプラグインを使って、ライブラリの更新状況を確認 ※フェーズの中でプラグインが必要な場合は、⾃動的に利⽤される ϑΣʔζͱΰʔϧ

Slide 33

Slide 33 text

NWOUFTUͷྫ [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building mvn-app 1.0 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mvn-app --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/jyukai/Dropbox/dev/sandbox/mvn-app/src/main/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ mvn-app --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mvn-app --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory /Users/jyukai/Dropbox/dev/sandbox/mvn-app/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ mvn-app --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mvn-app --- [INFO] Surefire report directory: /Users/jyukai/Dropbox/dev/sandbox/mvn-app/target/surefire-reports フェーズに必要なプラグインの準 備


Slide 34

Slide 34 text

NWOUFTUͷྫ ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.example.AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.117 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.340 s [INFO] Finished at: 2017-04-22T06:29:34+09:00 [INFO] Final Memory: 9M/155M [INFO] ------------------------------------------------------------------------ テストの結果を表⽰

Slide 35

Slide 35 text

compile ⇒ プロジェクトのソースコードをコンパイルする test ⇒ テストフレームワーク(JUnitなど)を使って、コンパイルした
      ソースコードをテストする。(packageやdeployといったフェーズでも
      実⾏されるが、必須ではない) package ⇒ プロジェクトをコンパイルして、パッケージングする
        (jarやwarにして、運⽤可能にする) clean ⇒ compileやpackageに必要なtargetフォルダを削除(掃除)する install、deploy ⇒ installはローカルに、deployはリポジトリに
             プロジェクトを公開する。
             (他のプロジェクトのpom.xmlから呼び出せるようになる) ୅දతͳϑΣʔζͷछྨ

Slide 36

Slide 36 text

NWOWFSTJPOTEJTQMBZEFQFOEFODZVQEBUFTͷྫ [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building xxxx [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- versions-maven-plugin:2.2:display-dependency-updates (default-cli) @ xxxx --- [INFO] The following dependencies in Dependencies have newer versions: [INFO] ch.qos.logback:logback-classic ........................ 1.2.2 -> 1.2.3 [INFO] de.agilecoders.wicket.webjars:wicket-webjars .......... 0.5.5 -> 2.0.1 [INFO] org.apache.wicket:wicket-extensions ................ 7.6.0 -> 8.0.0-M5 [INFO] org.apache.wicket:wicket-guice ..................... 7.6.0 -> 8.0.0-M5 [INFO] org.eclipse.jetty.aggregate:jetty-all ... [INFO] 9.2.19.v20160908 -> 9.4.4.v20170414 [INFO] org.mockito:mockito-all ........................ 1.10.19 -> 2.0.2-beta [INFO] org.postgresql:postgresql ...................... 42.0.0 -> 42.0.0.jre7 [INFO] org.sql2o:sql2o ................................... 1.5.4 -> 1.6.0-RC3 [INFO] org.webjars:bootstrap ..................... 3.3.7-1 -> 4.0.0-alpha.6-1 [INFO] org.wicketstuff:wicketstuff-html5 .................. 7.6.0 -> 8.0.0-M5 [INFO] org.wicketstuff:wicketstuff-htmlcompressor ......... 7.6.0 -> 8.0.0-M5 ------------- dependencyのライブラリに
 新しいメジャーバージョンのものがあるか検索してくれる


Slide 37

Slide 37 text

ݸਓతʹྑ͘࢖͏ϑΣʔζɾΰʔϧ ※個⼈の⾒解です mvn test ⇒ JUnitテスト mvn clean package ⇒ プロジェクトのパッケージング (何らかの事情でテストをスキップしたければ、-Dmaven.test.skip=trueや  -DskipTests=trueをつけることも) mvn versions:display-dependency-updates ⇒ ライブラリの更新状況の把握。なんだかんだいって楽。 mvn jetty:run ⇒ Jettyサーバを使ったWebアプリケーションのテストに (最近は組み込みのjettyやtomcatを使ってIDEから起動する⽅が多い)

Slide 38

Slide 38 text

࣮ફ
 ͬ͘͞ͱUXJUUFSΫϥΠΞϯτΛ࡞ͬͯΈΔ

Slide 39

Slide 39 text

コマンドプロンプトやターミナルで次の様に実⾏する。 mvn clean package ⇒ mvn-appのtargetフォルダに、mvn-app-1.0.jar ができる java -cp target/mvn-app-1.0.jar com.example.App ⇒ Hello World! が表⽰される NWOBQQΛύοέʔδϯά࣮ͯ͠ߦ

Slide 40

Slide 40 text

https://search.maven.org/ でtwitter4j-coreを検索 5XJUUFSKͷEFQFOEFODZΛબ୒ GroupIdが org.twitter4j の4.0.6をクリック

Slide 41

Slide 41 text

EFQFOEFODZΛฤू org.twitter4j twitter4j-core 4.0.6 mvn-appのpom.xmlの
 dependenciesの中にコピー

Slide 42

Slide 42 text

5XJUUFS4FSWJDFKBWBΛ࡞Δ package com.example; import twitter4j.Status; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterFactory; import twitter4j.conf.ConfigurationBuilder; import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; public class TwitterService { private static final String TL_BROCK_FORMAT = "-----------------------\n%s:%s\n%s"; private Twitter twitter;

Slide 43

Slide 43 text

5XJUUFS4FSWJDFKBWBΛ࡞Δ public TwitterService() { ConfigurationBuilder cb = new ConfigurationBuilder(); cb.setDebugEnabled(true) .setOAuthConsumerKey("****") .setOAuthConsumerSecret("****") .setOAuthAccessToken("****") .setOAuthAccessTokenSecret("****"); twitter = new TwitterFactory(cb.build()).getInstance(); } OAuthConsumerKey, OAuthConsumerSecret, OAuthAccessToken, OAuthAccessTokenSecret ͸ ࣗ෼ͷTwitterΞΧ΢ϯτ͔Β࡞ͬͯɺࠩ͠ସ͑Δ
 ͜ͷαΠτ͕ࢀߟʹͳΓ·͢ɿhttps://syncer.jp/Web/API/Twitter/REST_API/

Slide 44

Slide 44 text

5XJUUFS4FSWJDFKBWBΛ࡞Δ public void printTimeline() throws TwitterException { String ldtStr = ZonedDateTime.now().toString(); System.out.println("Checked at:" + ldtStr); twitter.getHomeTimeline().stream() .map(this::toTLBlock) .forEach(System.out::println); } private String toTLBlock(Status status) { String userName = status.getUser().getName(); String text = status.getText(); Instant instant = status.getCreatedAt().toInstant(); ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault()); return String.format(TL_BROCK_FORMAT, userName, text, zdt.toString()); } }

Slide 45

Slide 45 text

5XJUUFS"QQKBWBΛ࡞Δ package com.example; import twitter4j.TwitterException; public class TwitterApp { public static void main(String[] args) { TwitterService twitterService = new TwitterService(); try { twitterService.printTimeline(); } catch (TwitterException e) { e.printStackTrace(); } } }

Slide 46

Slide 46 text

IDEでファイル実⾏する *%&্Ͱ5XJUUFS"QQΛ࣮ߦͯ͠ΈΔ Checked at:2017-04-22T10:06:59.112+09:00[Asia/Tokyo] ----------------------- 湾岸ミッドナイトセリフbot:今までもそう・・ そしてこれからも・・・・ Zはいつでもお前しだいだ、アキオ 2017-04-22T10:06:46+09:00[Asia/Tokyo] ----------------------- ⻄端律⼦:英語の壁ががががが 早く崩さねば…。出るに出れない…。 2017-04-22T10:06+09:00[Asia/Tokyo] ----------------------- ⾚ちゃん:ママが僕と遊んだ後にパパを⾒て「でかっ!」って⾔ってるwww 2017-04-22T10:05:31+09:00[Asia/Tokyo] ----------------------- 楽しい例⽂:As he had eaten nothing for days, he was all but dead. 彼は何⽇も⾷べていなかった ので、死んだも同然だった。 2017-04-22T10:05:31+09:00[Asia/Tokyo] ----------------------- うらがみ⛄:RT @CyanosMod: 今⽇の講義、「PCの電源をつけましょう!」とか⾔い出して「アカンPC初めまして⽤の 講義取ったか!?」と思ったけど次の⼀⾔が「好きなディストリビューションは何ですか?」だったから安⼼した。 2017-04-22T10:03:30+09:00[Asia/Tokyo]

Slide 47

Slide 47 text

コマンドプロンプトやターミナルで次の様に実⾏する。 mvn clean package ⇒ mvn-appのtargetフォルダに、mvn-app-1.0.jar ができる java -cp target/mvn-app-1.0.jar com.example.TwitterApp ⇒ どうなりましたか? NWOBQQΛύοέʔδϯάͯ͠࠶࣮ߦ

Slide 48

Slide 48 text

Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.NoClassDefFoundError: twitter4j/TwitterException at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetMethodRecursive(Class.java:3048) at java.lang.Class.getMethod0(Class.java:3018) at java.lang.Class.getMethod(Class.java:1784) at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526) Caused by: java.lang.ClassNotFoundException: twitter4j.TwitterException at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 7 more NWOBQQΛύοέʔδϯάͯ͠࠶࣮ߦ 例外が発⽣する…
 ⇒ mavenで開発環境やビルド⼿順は整うが、パッケージングしてJavaが実⾏する場合は、
   mavenのことを知らない(twitterのライブラリが実⾏環境:クラスパスにない)
 ⇒ twitter-core.jarにクラスパスを通すか、実⾏可能jarを作る

Slide 49

Slide 49 text

mvn-appのpom.xmlに、maven-assemble-pluginを⼊れる ࣮ߦՄೳKBSʢGBUKBSʣΛ࡞Δ org.apache.maven.plugins maven-assembly-plugin jar-with-dependencies com.example.TwitterApp make-assembly package single ⇒ 実⾏⽤クラス ⇒ pachageフェーズで、プラグインのゴール”single”を
   実⾏する

Slide 50

Slide 50 text

コマンドプロンプトやターミナルで次の様に実⾏する。 mvn clean package ⇒ mvn-appのtargetフォルダに、mvn-app-1.0.jar と
   mvn-app-1.0-jar-with-dependencies.jar ができる java -cp target/mvn-app-1.0-jar-with-dependencies.jar   com.example.TwitterApp ⇒ どうなりましたか? NWOBQQͷ࣮ߦՄೳKBSΛಈ͔͢

Slide 51

Slide 51 text

最新のタイムラインが表⽰されてれば成功です! NWOBQQͷ࣮ߦՄೳKBSΛಈ͔͢ Checked at:2017-04-22T10:33:25.670+09:00[Asia/Tokyo] ----------------------- togetter_jp:.@Friendboy42さんの「「⽇本⼈は信⻑を化物にされたら怒らないのか?」→もうなってる」がホント すごい!えっまだチェックしてないって! https://t.co/biWJ15trBd ----------------------- 湾岸ミッドナイトセリフbot:今までもそう・・ そしてこれからも・・・・ Zはいつでもお前しだいだ、アキオ 2017-04-22T10:06:46+09:00[Asia/Tokyo] ----------------------- ⻄端律⼦:英語の壁ががががが 早く崩さねば…。出るに出れない…。 2017-04-22T10:06+09:00[Asia/Tokyo] ----------------------- ⾚ちゃん:ママが僕と遊んだ後にパパを⾒て「でかっ!」って⾔ってるwww 2017-04-22T10:05:31+09:00[Asia/Tokyo] ----------------------- 楽しい例⽂:As he had eaten nothing for days, he was all but dead. 彼は何⽇も⾷べていなかった ので、死んだも同然だった。 2017-04-22T10:05:31+09:00[Asia/Tokyo]

Slide 52

Slide 52 text

jarファイルの中に、実⾏環境(クラスパス)に
 必要なjarのクラスファイルが⼀緒にパッケージングされる
 (ファイルサイズは⼤きくなる) 次のコマで体験するSpring BootのWebアプリケーションなどでは、
 組み込みTomcatなども同様の⽅法でパッケージングされるので、
 サーブレットコンテナを⽤意しなくても実⾏できるようになる。 Mavenで通常のWebアプリケーションをパッケージングする場合は、
 WEB-INF/lib などにjarが⼊るように設定する。
 (⼤抵はフレームワークのArchtypeが設定しておいてくれる) ࣮ߦՄೳKBSͷಛ௃

Slide 53

Slide 53 text

උߟ

Slide 54

Slide 54 text

ホームフォルダの.m2/settings.xmlに、Mavenの
 ユーザごとの設定を記載できる。 たとえば、
  ローカルリポジトリ(ライブラリのダウンロード先)の変更
  HTTPプロキシの設定(社内や学内からの利⽤時)
  運⽤サーバのIDやパスワード PC内のグローバルな設定は、mavenのインストールディレクトリの
 conf/settings.xmlに記載できる。 .BWFOࣗମͷಈ࡞ઃఆ

Slide 55

Slide 55 text

.BWFOࣗମͷಈ࡞ઃఆ https://maven.apache.org/settings.html

Slide 56

Slide 56 text

IntelliJ IDEA, Eclipse, NetBeansといった主要なIDEには、
 内部的にMavenがバンドルされている
 (IDEの中だけで使う分には、MavenをインストールしなくてもOK) バージョンは古かったりするので、
 ・⾃分でインストールしたものをIDEに設定して使う、
 ・バンドルされているものを使う、
 ・両⽴する(メジャーバージョンの違いに注意)
 を決めて開発したほうが良い。 あくまで個⼈の経験談ですが、
 Eclipseは良くローカルリポジトリの調⼦を悪くします… *%&ͱ.BWFO

Slide 57

Slide 57 text

·ͱΊ

Slide 58

Slide 58 text

Ϗϧυ࡞ۀͷॾʑͷϑϩʔ΍ઃఆΛखॱԽͯ͠
 &OKPZ+BWB1SPHSBNNJOH