背景
あなたは、ユーティリティクラスを記述に使用される他のアイテムを提供したい場合は、開発プロセスでは、通常、他のプロジェクトで使用するlibディレクトリを取得することができます:
libには、コールの下で関連プロジェクトに導入します:
問題
それをあなたがそのプロジェクトを使用したいと私たちは、共通のlibディレクトリにない場合は?道のjarファイルをパッケージ化され、このようなファイルをコピーするなど、以前の古い方法、によると、彼らが使用されるが、維持および変更することは容易ではないだけですることはできませんされていないが、それぞれ変更した場合は、それぞれの場所は再び大げさに動作しなければならない、とリソースファイルが存在する場合でも、より多くのトラブル、それはサードパーティのオープンソースライブラリと同じにすることはできません。変更を完了するための場所、コードのローカル線を基準に解決することができますか?
このように:
implementation "io.reactivex.rxjava2:rxjava:2.x.y"
复制代码
もちろん、いくつかのプログラム、インターネットは、合理化し、私の側ビットを整理し、今日に私たちの迅速な公開と独自のコード、ピットや迂回路の小さなステップを共有容易にするためのステップ・テンプレートを与えるために多くの既製のソリューションがあります。
JcenterにJavaコードをアップロード
主な手順(プロキシで推奨フルを完了するために、または非常に低速または失敗しますが、一部のキー入力であるフレーム):
- サイン JFrog Bintrayアカウントを
右にここでのアカウントレジスタを開くには注意してください、あなたは緑のボタンの左に登録されないように注意する必要があり、そしてバックは非常に面倒になります。
- 登録が成功した後、あなたのプロフィールであなたのAPIキーを覚えて、アップロードが使用するようになります。
- 新しい倉庫を作成し、倉庫は、私たちは、コードをどこで管理されます
- ちょうど倉庫(レポジトリ)パッケージ(Packge)で作成され続け、例えば、私は今、このパッケージに渡されたコード内のツールを投影する準備が整いましたので、私は作成しました: gitのバージョン管理、リンクの最後に書いてみる、あるいは簡単な失敗を監査します
これまでのところ、私の準備は、基本的にはいくつかの重要なメッセージを見て、場所に置かれています:
- 倉庫名:TestRepository
- パッケージ名:MyTools
- ユーザー名:soulqw(あなた自身に置き換えられます)
- APIキー:XXXXXXXX(あなた自身に置き換えられます)
- いくつかのテンプレート設定を行うために私たちのプロジェクトに戻ります
- 私たちのプロジェクトをGradleのルートに次の構成ファイルを追加します。
dependencies {
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
}
复制代码
- 私たちは、それがどこ当社のツールのディレクトリで、バックディレクトリへのパスは次のようにそのGradleのファイルに追加する必要があります。
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
def siteUrl = 'https://www.google.com/' //可选 如果有的话
def gitUrl = 'https://www.google.com/' //可选 如果有的话
group = "com.share" //路径
version = "0.0.2.release" //版本名称, 不要用beta,否则容易审核不通过
//以上两个配合项目目录名最终上传上去引用就是 compile 'com.share:tools:0.0.2.release'
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}
artifacts {
archives javadocJar
archives sourcesJar
}
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'is permission tool for android'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'soulqw' //用户名
name 'qinwei' //姓名
email '[email protected]' //邮箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
//关键信息我们从localProperties文件中读取
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "TestRepository" // 仓库名
name = "MyTools"// 包名
desc = 'just tools'
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}
复制代码
私たちは次のようにルールがあるプロジェクト、グループ、バージョン、および最終的なプロジェクトのディレクトリマージスタイルを渡す必要が上記のバージョン番号を入力します。
最後に、我々はlocalPropertiesファイルにユーザー名とAPIキーを記入した後: 上記の手順が完了した後、ターミナルは、プロジェクトディレクトリ、種類を開きます。./gradlew install bintrayUpload
复制代码
次に、以下のような成功は、次のとおりです。
私たちは、図書館で見て渡さ
だから、私たちの究極の基準は以下のとおりです。dependencies {
// implementation project(':tools')
implementation 'com.share:tools:0.0.2.release'
}
复制代码
注意:
- グローバルプロキシでアップロードプロセスを完了するようにしてください
- 成功したバージョンが渡された後に変更することが必要であれば、我々は、名前の修正版を再アップロードするためのコードを再修正、変更することはできませんな0.0.2.releaseとして、(拒否レビューにrealeaseまたはバージョン番号、または簡単に使用するようにしてください)
- 今、後で参照を渡されて、あなたは、監査の採択後、Jcenterに追加する必要はありませんすることができ
説明は、使用可能な承認のために一日か二日に数時間、通常、うまく埋めるようにしてください。監査が拒否された場合、あなたを断る理由は、あなたが再検討することができ、再び彼の要求を変更して、メッセージに返信して説明します。
承認されると、後続の反復は限り名前の修正版として再審査する必要はありません。
- Libの依存プロジェクトは、Androidのサポートライブラリとしてライブラリを、所有している場合
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
}
复制代码
アプリケーションのプロジェクトでは、このライブラリを使用しますが、それぞれが矛盾のバージョン番号に依存して、編集が原因一貫性のないバージョン番号とエラーに簡単であるとき、アプリケーション・プログラムは、このlibが導入されるように、正しい姿勢がで適切なライブラリにLIBの依存関係を言うことです実装にcompileOnlyかにより提供されるコンパイルします
dependencies {
//这样引用容易引发冲突,改为compileOnly 仅仅lib内可用
// implementation 'com.android.support:appcompat-v7:28.0.0'
compileOnly 'com.android.support:appcompat-v7:28.0.0'
}
复制代码
以下は、古いものと新しい設定でいくつかのGradleの変化を示す表です。
新しい設定 | 古い設定 | 行動 |
---|---|---|
実装 | コンパイル | モジュールの依存関係は、コンパイル時に利用できる、とランタイムモジュールの消費者にのみ利用可能です。代わりに、それはシステムを構築するプロジェクトの量を減らすことができるので、大幅に、ビルド時間を短縮することができ、API /コンパイルを使用しての大規模なマルチプロジェクトの実施の構築のために再コンパイルする必要があります。ほとんどのアプリケーションとテストモジュールは、この設定を使用する必要があります。 |
API | コンパイル | モジュールの依存関係は、消費者に利用可能とコンパイル時にモジュールコンパイル時と実行時に利用できます。この構成は、通常の状況下で、あなただけのライブラリモジュールでそれを使用する必要があり、(現在は非推奨)行動のコンパイルに似ています。あなたは、個々のテストモジュールにそのAPIをオープンする場合を除き、アプリケーションモジュールは、インプリメンテーションを使用する必要があります。 |
compileOnly | 提供 | モジュールの依存関係はコンパイル時にのみ利用可能であり、その消費者は、コンパイルや実行時には使用できません。この動作は、提供された構成(現在は非推奨)に似ています。 |
RUNTIMEONLY | APK | モジュールとその依存関係は、実行時にのみ消費者に利用可能です。この構成は、APK(現在は非推奨)のように振る舞います。 |
はじめに:
その後、プロジェクトの開発で、私たちのプロジェクトはゆっくりkotlinに移動し、後でKotlinへのクラスのツールとして登場しました。
Updateメソッド、++版、
アップロードし、
その後。。。
デフォルトでは、関連する情報へのアクセスによるオリジナルkotlinファイルのjavadoc生成エラーは、ちょうどそう、同様のGradleでいくつかの設定ファイルを追加します。Kotlinコードをアップロードサポート
- 戻るとプロジェクトレベルのGradleファイル:
classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18"
复制代码
その後、完全なファイルは次のようにする必要があります:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.10'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'
//upload
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
//kotlin
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
//for kotlin upload
classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.18"
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
复制代码
戻るのGradleファイルの当社のツールを、作ります。
//for kotlin upload
apply plugin: 'org.jetbrains.dokka'
//同时添加三个方法 for kotlin
task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
outputFormat = 'javadoc'
outputDirectory = javadoc.destinationDir
}
task generateJavadoc(type: Jar, dependsOn: dokkaJavadoc) {
group = 'jar'
classifier = 'javadoc'
from javadoc.destinationDir
}
task generateSourcesJar(type: Jar) {
group = 'jar'
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
复制代码
アーチファクトが置き換えられます:
artifacts {
archives generateJavadoc //javadocJar
archives generateSourcesJar //sourcesJar
}
复制代码
そして、最終的なテンプレートがあるkotlin Javaがダウンアップロードアップロードすることができます:
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
//for upload
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'
//for kotlin upload
apply plugin: 'org.jetbrains.dokka'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 14
targetSdkVersion 28
versionCode 2
versionName "0.0.3"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//这样引用容易引发冲突,改为compileOnly 仅仅lib内可用
// implementation 'com.android.support:appcompat-v7:28.0.0'
compileOnly 'com.android.support:appcompat-v7:28.0.0'
compileOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
def siteUrl = 'https://www.google.com/' //可选 如果有的话
def gitUrl = 'https://www.google.com/' //可选 如果有的话
group = "com.share" //路径
version = "0.0.3.release" //版本名称, 不要用beta,否则容易审核不通过
//以上两个配合项目目录名最终上传上去引用就是 compile 'com.share:tools:0.0.2.release'
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
//同时添加三个方法 for kotlin
task dokkaJavadoc(type: org.jetbrains.dokka.gradle.DokkaTask) {
outputFormat = 'javadoc'
outputDirectory = javadoc.destinationDir
}
task generateJavadoc(type: Jar, dependsOn: dokkaJavadoc) {
group = 'jar'
classifier = 'javadoc'
from javadoc.destinationDir
}
task generateSourcesJar(type: Jar) {
group = 'jar'
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task copyDoc(type: Copy) {
from "${buildDir}/docs/"
into "docs"
}
//for java only
//artifacts {
// archives javadocJar
// archives sourcesJar
//}
//for kotlin
artifacts {
archives generateJavadoc //javadocJar
archives generateSourcesJar //sourcesJar
}
install {
repositories.mavenInstaller {
// This generates POM.xml with proper parameters
pom {
project {
packaging 'aar'
name 'is permission tool for android'
url siteUrl
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'soulqw' //用户名
name 'qinwei' //姓名
email '[email protected]' //邮箱
}
}
scm {
connection gitUrl
developerConnection gitUrl
url siteUrl
}
}
}
}
}
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
//关键信息我们从localProperties文件中读取
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
repo = "TestRepository" // 仓库名
name = "MyTools"// 包名
desc = 'just tools'
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
javadoc {
options {
encoding "UTF-8"
charSet 'UTF-8'
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
}
}
复制代码
そして、その上にアップロードコマンドを入力します。
概要
以上の処理によれば、通常を通じてアクセスできる任意の問題のアップロードができなくなり、基本的に完了しました
最後に、設定ファイルlocalpropertiesに注意を払います
ます。https://juejin.im/post/5cf8dc44e51d454f6f16eb9eで再現