#mynavi() #setlinebreak(on) * 目次 [#u5ced353] #contents -- 関連 - 関連 -- [[Javaメモ]] ** 概要 [#y780c8fa] #html(<div style="padding-left:10px;">) GitlabをMavenリポジトリとして使用する方法について記載する。 *** ライブラリプロジェクト [#xd0f955f] #html(<div style="padding-left:10px;">) |URL(例)|説明|h |https://gitlab.com/username/java_lib.git|Mavenリポジトリとして公開するライブラリプロジェクト| #html(<div style="clear:both">) #html(<div style="float:left">) ビルド前 #html(<div style="padding:10px; border:1px solid #333;display: inline-block">) ├ build.gradle └ src └ main └ java └ com/example └ SampleUtil.java #html(</div>) #html(</div>) #html(<div style="float:left">) ビルド後 #html(<div style="padding:10px; border:1px solid #333;display: inline-block;margin-left:20px;">) ├ build.gradle ├ maven │ └ com/example/sample │ ├ 1.0.0 │ │ ├ sample-1.0.0.jar │ │ ├ sample-1.0.0.pom │ │ └ : │ └ maven-metadata.xml └ src └ main └ java └ com/example └ SampleUtil.java #html(</div>) #html(</div>) #html(</div>) #html(</div>) #html(<div style="clear:both">) *** ライブラリを使用する側のプロジェクト [#i2f50643] #html(<div style="padding-left:10px;">) ビルド前 #html(<div style="padding:10px; border:1px solid #333;display: inline-block">) ├ build.gradle └ src └ main └ java └ com/example └ UseSample.java #html(</div>) #html(</div>) #html(</div>) #html(</div>) ** 環境設定 [#xb8127e8] #html(<div style="padding-left:10px;">) *** SSH鍵の作成 [#r2c43441] #html(<div style="padding-left:10px;">) 秘密鍵: ~/.ssh/gitlab_xxx@example.com、 公開鍵: ~/.ssh/gitlab_xxx@example.com.pub として生成 #myterm2(){{ ssh-keygen -t rsa -C xxx@example.com }} #html(</div>) *** gitlabに作成した公開鍵を登録 [#x2a0e24b] #html(<div style="padding-left:10px;">) #myterm2(){{ cat gitlab_xxx@example.com.pub # Macの場合 cat gitlab_xxx@example.com.pub | pbcopy # そのままクリックボードにコピー }} ※取得した内容をgitlabに登録する。( https://gitlab.com/profile/keys ) #html(</div>) *** ~/.ssh/configの追記 [#oa4e8a74] #html(<div style="padding-left:10px;">) #mycode2(){{ Host gitlab.com User xxx@example.com IdentityFile ~/.ssh/gitlab_xxx@example.com }} #html(</div>) *** ssh-agent に秘密鍵を追加する [#g4b0bd93] #html(<div style="padding-left:10px;">) #myterm2(){{ # ssh-agent起動 eval `ssh-agent` # 登録されている秘密鍵の一覧を確認 ssh-add -l # 秘密鍵を登録 ssh-add ~/.ssh/gitlab_xxx@example.com # 登録されている秘密鍵の一覧を確認 ssh-add -l # 接続確認 ssh -T git@gitlab.com }} #html(</div>) #html(</div>) ** ライブラリ側プロジェクトの作成 [#wb182ef7] #html(<div style="padding-left:10px;">) 事前に gitlab にプロジェクト( java_lib )を作成しておく。 *** git clone [#f299559f] #html(<div style="padding-left:10px;">) #myterm2(){{ git clone git@gitlab.com:username/java_lib.git }} #html(</div>) *** ライブラリの作成 [#da338ae2] #html(<div style="padding-left:10px;">) src/main/java/com/example/SampleUtil.java #mycode2(){{ package com.example; public class SampleUtil { public static String hello(String name){ return "Hello " + name; } } }} #html(</div>) *** build.gradleの作成 [#o423c837] #html(<div style="padding-left:10px;">) #mycode2(){{ apply plugin: 'idea' apply plugin: 'java' apply plugin: 'maven' def defaultEncoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = defaultEncoding sourceCompatibility = 1.8 targetCompatibility = 1.8 repositories { //maven { url System.getenv('HOME') + '/.m2/repository' } mavenCentral() } dependencies { testCompile 'junit:junit:4' } // グループID、アーティファクトID、バージョンを指定 group = 'com.example' archivesBaseName = 'samplelib' version = '1.0.0' // maven構成の生成用タスクを追加 uploadArchives.repositories.mavenDeployer { repository(url: "file:${projectDir}/maven") } }} #html(</div>) *** ビルド [#p8a20fb1] #html(<div style="padding-left:10px;">) #myterm2(){{ gradle uploadArchives }} ※ プロジェクト maven 配下にビルドされる *** gitlabにプッシュ [#i42b25fd] #myterm2(){{ git add . git commit -m 'first commit' git push }} #html(</div>) ** ライブラリを使用する側のプロジェクト [#t2db92a1] #html(<div style="padding-left:10px;">) build.gradle #mycode2(){{ apply plugin: 'idea' apply plugin: 'java' apply plugin: 'maven' //apply plugin: 'git-repo' apply plugin: 'application' def defaultEncoding = 'UTF-8' [compileJava, compileTestJava]*.options*.encoding = defaultEncoding sourceCompatibility = 1.8 targetCompatibility = 1.8 mainClassName = 'com.example.UseSample' buildscript { repositories { jcenter() //maven { url "https://github.com/layerhq/releases-gradle/raw/master/releases" } } dependencies { //classpath 'com.layer:gradle-git-repo-plugin:2.0.2' } } repositories { //maven { url System.getenv('HOME') + '/.m2/repository' } mavenCentral() /* プライベートリポジトリ上のライブラリを利用する場合 (利用するプラグインによって書き方は様々) mavenプラグインを利用する場合は素の maven-metadata.xml を読めるURLのプレフィックスを指定する */ //git("https://gitlab.com/username/java_lib.git", "com.example.samplelib", "master", "maven") //git("git@gitlab.com:username/java_lib.git", "com.example.samplelib", "master", "maven") //maven { url "http://localhost:8080/sample-group1/sample1/raw/master/maven" } maven { url "git@gitlab.com:username/java_lib.git/raw/master/maven" } /* maven { url "https://gitlab.com/username/java_lib/raw/master/maven" //credentials { // username "username" // password "password" //} } */ } dependencies { testCompile 'junit:junit:4' // 先程作成したライブラリのグループID、アーティファクトID、バージョンを追加 compile "com.example:samplelib:1.0.0" //compile fileTree(dir: "libs", includes: ['*.jar']) } // ファイルのコピー先(カレントからの相対PATH) def dependJarCopyTo = 'libs' // コピー先にあるファイルをいったん削除 task delDependJar << { delete dependJarCopyTo } // 依存するライブラリjarを指定したディレクトリにコピーする task getDependJar(dependsOn: delDependJar) { doLast { configurations.compile.each { def fromJarFile = it.absolutePath copy { from fromJarFile into dependJarCopyTo } } println "----- 以下のjarファイルを取得しました -----" FileCollection copyFiles = files { file(dependJarCopyTo).listFiles() } copyFiles.each {File file -> println file.name} } } }} #html(</div>) *** ライブラリを使用する処理の作成 [#te9ce1b5] #html(<div style="padding-left:10px;">) src/main/java/com/example/UseSample.java #mycode2(){{ package com.example; import com.example.SampleUtil; public class UseSample { public static void main(String[] args){ System.out.println(SampleUtil.hello("Taro")); } } }} #html(</div>) *** ビルド [#tf25e596] #html(<div style="padding-left:10px;">) #myterm2(){{ gradle build }} #html(</div>) *** 実行 [#x3af2854] #html(<div style="padding-left:10px;">) #myterm2(){{ gradle run }} #html(</div>) #html(</div>)