使用 javadocs 将库项目编译为 gradle 的 jar
Compile library project with javadocs to jar with gradle
我目前正在尝试将我的库项目编译成一个也包含 javadoc 的 .jar 文件,并取得了一些成功。
当我在我的 build.gradle 文件中包含 compile 'com.squareup:otto:1.3.8'
时,我最终得到了我想要的我自己的图书馆。当我将鼠标悬停在库中的函数上时,我看到了它们包含的 javadoc,它是一个 .jar 文件。
我当前的代码编译得很好,但我最终得到一个 .aar 文件(尽管我的库项目中没有任何资源),而且我也没有包含 javadoc(尽管它们是在项目中编写的) .
我当前的build.gradle代码:
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "0.3.5"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
def groupId = 'com.moonbloom'
def artifactId = 'boast'
def version = '0.3.5'
def localReleaseDest = "${buildDir}/release/${version}"
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
uploadArchives {
repositories.mavenDeployer {
pom.groupId = groupId
pom.artifactId = artifactId
pom.version = version
// Add other pom properties here if you want (developer details / licenses)
repository(url: "file://${localReleaseDest}")
}
}
task zipRelease(type: Zip) {
from localReleaseDest
destinationDir buildDir
archiveName "release-${version}.zip"
}
task generateRelease << {
println "Release ${version} can be found at ${localReleaseDest}/"
println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
}
generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
然后我只是 运行 'gradlew clean build generateRelease',最后我得到了一个 .zip 文件,我可以上传到 JCenter(工作正常)。
我不久前在 Whosebug 上找到了这段代码,我似乎无法编辑它以按我想要的方式工作,而且我似乎找不到其他正常工作的例子。
我不需要自动上传到 Bintray(因为我已经看过很多指南)。
这是我当前上传的图书馆:
https://bintray.com/moonbloom/android/Boast/v0.3.5#files
这是 Otto,如我所愿:
https://bintray.com/bintray/jcenter/com.squareup%3Aotto/1.3.8/view#files
希望这里有人能帮助我。
如果不想将项目编译为库,请更改此行:
apply plugin: 'com.android.library'
到 apply plugin: 'com.android.application'
我设法解决了我的问题,我必须承认这是一种老掉牙的方式。
我有我的原始代码(它创建了库 .aar 文件和 sources/javadocs .jar 文件)
我找到了一些可以创建我的库 .jar 文件的附加代码。
然后我自己编写了一些代码,将库 .jar 文件移动到正确的文件夹并删除了一些不需要的文件。
而且我还找到了一些代码,可以轻松地将所有 gradle 函数变成一个简单的函数(这比我想象的要难)。
最后得到一个完美的 .zip 文件,可以轻松上传到 jcenter,当我通过 gradle 下载它时,javadocs 工作完美。
只需 运行 'gradlew all',它会做所有事情。
我的代码如下,如果有人和我有同样的问题:
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "0.4.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: "libs", include: ["*.jar"])
}
def identifier = "com"
def name = "testname"
def groupId = "${identifier}.${name}"
def artifactId = "libraryname"
def version = "0.4.1"
def localReleaseDest = "${buildDir}/release/${version}"
def nearFullPath = "${localReleaseDest}/${identifier}/${name}/${artifactId}"
def fullPath = "${nearFullPath}/${version}"
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = "javadoc"
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = "sources"
from android.sourceSets.main.java.srcDirs
}
task makeJar(type: Copy) {
from("build/intermediates/bundles/release/")
into("${fullPath}/")
include("classes.jar")
rename ("classes.jar", "${artifactId}-${version}.jar")
doLast {
println "- '${artifactId}-${version}.jar' has been built"
}
}
uploadArchives {
repositories.mavenDeployer {
pom.groupId = groupId
pom.artifactId = artifactId
pom.version = version
repository(url: "file://${localReleaseDest}")
}
}
task removeUnwantedFiles(type: Delete) {
delete fileTree(dir: "${nearFullPath}/", include: ["*.md5", "*.sha1", "*.aar"])
delete fileTree(dir: "${fullPath}/", include: ["*.md5", "*.sha1", "*.aar"])
doLast {
println "- Unwanted files have been removed in these folders:"
println "--- ${nearFullPath}"
println "--- ${fullPath}"
}
}
task zipRelease(type: Zip) {
from localReleaseDest
destinationDir buildDir
archiveName "${artifactId}-${version}.zip"
doLast {
println "- Release ${version} can be found at ${localReleaseDest}/"
println "- Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
}
}
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
def buildAliases = [
'all' : ['clean', 'build', 'makeJar', 'uploadArchives', 'removeUnwantedFiles', 'zipRelease']
]
def expandedTaskList = []
gradle.startParameter.taskNames.each {
expandedTaskList << (buildAliases[it] ? buildAliases[it] : it)
}
gradle.startParameter.taskNames = expandedTaskList.flatten()
println "Following tasks have been run: ${gradle.startParameter.taskNames}"
我目前正在尝试将我的库项目编译成一个也包含 javadoc 的 .jar 文件,并取得了一些成功。
当我在我的 build.gradle 文件中包含 compile 'com.squareup:otto:1.3.8'
时,我最终得到了我想要的我自己的图书馆。当我将鼠标悬停在库中的函数上时,我看到了它们包含的 javadoc,它是一个 .jar 文件。
我当前的代码编译得很好,但我最终得到一个 .aar 文件(尽管我的库项目中没有任何资源),而且我也没有包含 javadoc(尽管它们是在项目中编写的) .
我当前的build.gradle代码:
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "0.3.5"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
def groupId = 'com.moonbloom'
def artifactId = 'boast'
def version = '0.3.5'
def localReleaseDest = "${buildDir}/release/${version}"
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = 'javadoc'
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.srcDirs
}
uploadArchives {
repositories.mavenDeployer {
pom.groupId = groupId
pom.artifactId = artifactId
pom.version = version
// Add other pom properties here if you want (developer details / licenses)
repository(url: "file://${localReleaseDest}")
}
}
task zipRelease(type: Zip) {
from localReleaseDest
destinationDir buildDir
archiveName "release-${version}.zip"
}
task generateRelease << {
println "Release ${version} can be found at ${localReleaseDest}/"
println "Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
}
generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
然后我只是 运行 'gradlew clean build generateRelease',最后我得到了一个 .zip 文件,我可以上传到 JCenter(工作正常)。
我不久前在 Whosebug 上找到了这段代码,我似乎无法编辑它以按我想要的方式工作,而且我似乎找不到其他正常工作的例子。
我不需要自动上传到 Bintray(因为我已经看过很多指南)。
这是我当前上传的图书馆:
https://bintray.com/moonbloom/android/Boast/v0.3.5#files
这是 Otto,如我所愿:
https://bintray.com/bintray/jcenter/com.squareup%3Aotto/1.3.8/view#files
希望这里有人能帮助我。
如果不想将项目编译为库,请更改此行:
apply plugin: 'com.android.library'
到 apply plugin: 'com.android.application'
我设法解决了我的问题,我必须承认这是一种老掉牙的方式。
我有我的原始代码(它创建了库 .aar 文件和 sources/javadocs .jar 文件)
我找到了一些可以创建我的库 .jar 文件的附加代码。
然后我自己编写了一些代码,将库 .jar 文件移动到正确的文件夹并删除了一些不需要的文件。
而且我还找到了一些代码,可以轻松地将所有 gradle 函数变成一个简单的函数(这比我想象的要难)。
最后得到一个完美的 .zip 文件,可以轻松上传到 jcenter,当我通过 gradle 下载它时,javadocs 工作完美。
只需 运行 'gradlew all',它会做所有事情。
我的代码如下,如果有人和我有同样的问题:
apply plugin: 'com.android.library'
apply plugin: 'maven'
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "0.4.1"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
abortOnError false
}
}
dependencies {
compile fileTree(dir: "libs", include: ["*.jar"])
}
def identifier = "com"
def name = "testname"
def groupId = "${identifier}.${name}"
def artifactId = "libraryname"
def version = "0.4.1"
def localReleaseDest = "${buildDir}/release/${version}"
def nearFullPath = "${localReleaseDest}/${identifier}/${name}/${artifactId}"
def fullPath = "${nearFullPath}/${version}"
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
classifier = "javadoc"
from androidJavadocs.destinationDir
}
task androidSourcesJar(type: Jar) {
classifier = "sources"
from android.sourceSets.main.java.srcDirs
}
task makeJar(type: Copy) {
from("build/intermediates/bundles/release/")
into("${fullPath}/")
include("classes.jar")
rename ("classes.jar", "${artifactId}-${version}.jar")
doLast {
println "- '${artifactId}-${version}.jar' has been built"
}
}
uploadArchives {
repositories.mavenDeployer {
pom.groupId = groupId
pom.artifactId = artifactId
pom.version = version
repository(url: "file://${localReleaseDest}")
}
}
task removeUnwantedFiles(type: Delete) {
delete fileTree(dir: "${nearFullPath}/", include: ["*.md5", "*.sha1", "*.aar"])
delete fileTree(dir: "${fullPath}/", include: ["*.md5", "*.sha1", "*.aar"])
doLast {
println "- Unwanted files have been removed in these folders:"
println "--- ${nearFullPath}"
println "--- ${fullPath}"
}
}
task zipRelease(type: Zip) {
from localReleaseDest
destinationDir buildDir
archiveName "${artifactId}-${version}.zip"
doLast {
println "- Release ${version} can be found at ${localReleaseDest}/"
println "- Release ${version} zipped can be found ${buildDir}/release-${version}.zip"
}
}
artifacts {
archives androidSourcesJar
archives androidJavadocsJar
}
def buildAliases = [
'all' : ['clean', 'build', 'makeJar', 'uploadArchives', 'removeUnwantedFiles', 'zipRelease']
]
def expandedTaskList = []
gradle.startParameter.taskNames.each {
expandedTaskList << (buildAliases[it] ? buildAliases[it] : it)
}
gradle.startParameter.taskNames = expandedTaskList.flatten()
println "Following tasks have been run: ${gradle.startParameter.taskNames}"