Git 開発を始める

gitの初期化

git init



gitignoreファイル作成

vim .gitignore

.gitignoreの中身

build/
.classpath
.gradle/
.project
.settings/
bin/



リモートリポジトリにリポジトリを作る

git clone URL



リモートリポジトリを追加する

fork元

git remote add upstream fork元のURL

fork先(自分)

git remote add origin fork先のURL

リモートリポジトリの詳細一覧見る

git remote -v

Java Gradle マルチプロジェクト作成方法

プロジェクト構成
multi-sample
+--- sample-common
+--- sample-core (sample-commonに依存)



  • まずEclipsesample-commonsample-coreのGradle(STS)のプロジェクト作成



  • multi-sampleの直下でGradleによるプロジェクト初期化
gradle init



  • settings.gradleを編集
rootProject.name = 'multi-sample'
include "sample-common", "sample-core"



  • build.gradleを編集
subprojects {
    apply plugin: 'eclipse'
    apply plugin: 'java'
    apply plugin: 'idea'

    def defaultEncoding = 'UTF-8'
    tasks.withType(JavaCompile) {
        options.encoding = defaultEncoding
    }

    sourceCompatibility = 1.8
    targetCompatibility = 1.8

    project.ext {
      authorName = 'YOUR NAME'
      dropwizardVersion = 'バージョン'
    }

    repositories {
        mavenCentral()
    }

    dependencies {
        compile "io.dropwizard:dropwizard-core:${dropwizardVersion}"
    }

    version = '1.0'

    task wrapper(type: Wrapper) {
      gradleVersion = '2.14'
    }
}

project(':sample-common') {
}

project(':sample-core') {
    dependencies {
        compile project(':sample-common')
    }
}



  • gradle eclipseを叩く




参照:GradleによるJavaプロジェクトのビルド

Java デザインパターンとは

デザインパターン

よく使われる設計をパターン化したもの。


メリット

  • プログラムの再利用がしやすくなる

  • コードが読みやすくなる


有名なのがGoFデザインパターン
GoFには23個のデザインパターンがある。



Builderパターン

様々なオブジェクトを作るためのパターン。
ビルダクラス・ディレクタクラスの2つを用意する。


ビルダクラス:様々なオブジェクトを生成するためメソッドを提供する。
ディレクタクラス:複数のビルダクラスをまとめて管理するクラス。



参照:GoFの23のデザインパターンを,Javaで活用するための一覧表 (パターンごとの要約コメント付き) - 主に言語とシステム開発に関して

git rebase・squash

rebase

今までのコミットしてきたものの上にmasterのコミットをポンっと置くイメージ。
rebaseするときは一旦新たにブランチを切ってから行うべし。



squash

コミットを一つにまとめる


squashの流れ

コマンドでコミットのログを見る
git log --oneline

を叩くと、

nanako:gtest nanako$ git log --oneline
a0de58f last commit
1574f49 sample3
17a75e7 sample2
6b45ec9 sample1
791c07e first commit
sample1、sample2、sample3をcommit allとしてコミットをまとめるとすると、
git rebase -i 791c07e

を叩くと、下のものが出てくる。

pick 6b45ec9 sample1
pick 17a75e7 sample2
pick 1574f49 sample3
pick a0de58f last commit
sample2とsample3のpickの部分をsに変更して上書き保存。
コミットのメッセージが表示されるので、first commit's message isに描かれているsample1を消して、commit allと書いて上書き保存。
再度コミットのログを確認
git log --oneline
a0de58f last commit
84yeu43 commit all
791c07e first commit

Java パラメーターの種類

@FormParam

<form>
    <input name = "email">
    <input name = "password">

    <input type = "submit">
</form>


emailpasswordの部分にあたるものがパラメーターとして送られてくる。



@QueryParam

ブラウザから送るURLにある?以降がパラメーターになる。
ex) http://xxxx.com/hoge?email=hoge@xxx.jp&password=“pass”



@PathParam

URLが下記の時、
ex) http://xxxx.com/hoge/1

APIの方で指定しているresource
/hoge/{ id }の部分と対応していて、パラメーターはid = 1になる。

.ymlにあるhttpClientとは

そもそもHTTPとは

WebクライアントとWebサーバーの送受信において使われる取り決めのこと。
リクエスト・レスポンスのルール。


Webアクセスの流れ
  1. ユーザーがURLを入力する

  2. HTTPリクエストが、サーバーに送られる

  3. サーバーがHTTPリクエストを読み取って要求内容を分析する

  4. 要求されたデータを返す(HTTPレスポンス)

  5. Webブラウザが、サーバーからのデータを解析して、WebページとしてPCに表示する



connectionTimeout

クライアントからサーバーへの接続が確立するまで待って諦めるまでの時間。
1000ms = 1秒



timeout

接続後のデータ取得をするために待って諦めるまでの時間。

dropwizard + Gradle

  • Eclipse Marketplaceでgradleをインストール

  • 新規プロジェクト作成の時に「Gradle(STS)」を選択して作成。

  • build.gradleを編集。

apply plugin: 'idea'
apply plugin: 'java'

def defaultEncoding = 'UTF-8'
def jdkVersion = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    compile 'io.dropwizard:dropwizard-core:1.0.3'
    compile 'io.dropwizard:dropwizard-configuration:1.0.3'
}

compileJava {
    options.encoding = defaultEncoding
}
compileTestJava {
    options.encoding = defaultEncoding
}

idea {
    project {
        jdkName = jdkVersion
        languageLevel = jdkVersion
    }
}

jar {
    from (configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/*.SF'
        exclude 'META-INF/*.DSA'
        exclude 'META-INF/*.RSA'
    }
    manifest {
        attributes('Main-Class': 'org.gradle.service.HelloWorldService')
    }
}
  • gradle jarを叩く。

  • プロジェクトを右クリックしてGradle(STS)> Refresh Dependenciesを選択。
    これでdependenciesが反映される。

  • クラスの内容を、Dropwizard入門 - Qiitaに従って書いていく。

  • java -jar build/libs/gtest.jar server hello-world.ymlで実行。




エラー

java -jar build/libs/gtest.jar server hello-world.ymlを実行すると

エラー: メイン・クラスorg.gradle.service.HelloWorldServiceが見つからなかったかロードできませんでした

と出てくる。

HelloWorldServiceクラスは存在するのにさあどうして。




解決

gradle build

からの

java -jar build/libs/gtest.jar server hello-world.yml

で再びエラー

hello-world.yml has an error:
  * Failed to parse configuration at: logging.appenders.[0]; Could not resolve type id 'console' into a subtype of [simple type, class io.dropwizard.logging.AppenderFactory<ch.qos.logback.classic.spi.ILoggingEvent>]: known type ids = [AppenderFactory]
 at [Source: N/A; line: -1, column: -1] (through reference chain: org.gradle.configuration.HelloWorldConfiguration["logging"]->io.dropwizard.logging.DefaultLoggingFactory["appenders"]->java.util.ArrayList[0])



hello-world.ymlのlogginappendersコメントアウト

hello-world.ymlファイル

template: "Hello, %s!"

# use the simple server factory if you only want to run on a single port

server:
  applicationConnectors:
    - type: http
      port: 28080
  adminConnectors:
    - type: http
      port: 28081

## logging settings.
#logging:
#
#  # the default level of all loggers. Can be OFF, ERROR, WARN, INFO, DEBUG, TRACE, or ALL.
#  level: DEBUG
#
#  appenders:
#    - type: console
#      timeZone: JST

コマンドで再び

java -jar build/libs/gtest.jar server hello-world.yml

http://localhost:28080/hello?name=hogeにアクセスすると
{"message":"Hello, hoge!"}と無事表示されました。