手动添加依赖 pom/iml 文件的 aar
Manually adding aar with dependency pom/iml file
因为我不能使用私有 maven 来共享我的库,所以我正在考虑共享 aar 并导入到另一个项目中。
当 aar 和 jar 文件不包含任何依赖项时,问题就来了。因此,一旦我在 android studio 中手动导入 aar(使用 Import .JAR/.AA Package),就没有依赖项了,我必须再次手动添加所有依赖项。
我已经通过 gradle 任务生成了一个 pom 文件,尽管我找不到任何方法在项目中手动导入它。
关于"Import .JAR/.AA Package"自动生成的build.gradle文件是:
configurations.maybeCreate("default")
artifacts.add("default", file('TestSample_1.0.0.aar'))
有没有办法也添加 pom/iml 文件?类似于:
artifacts.add("default", file('pomDependencies.xml'))
1。发布
在您的 aar 项目中,添加 maven-publish
插件并添加必要的插件配置。
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
...
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.novoda:bintray-release:0.2.7'
}
...
publishing {
publications {
maven(MavenPublication) {
groupId 'com.example' //You can either define these here or get them from project conf elsewhere
artifactId 'example'
version '0.0.1-SNAPSHOT'
artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
注意事项:
我们正在使用自定义 maven 发布,因此您必须使用 artifact
子句
定义要发布的内容
我们必须自己生成 pom,在上面的代码中我使用了所有编译配置依赖项,您可能需要确保涵盖所有您关心的配置。
运行 gradle publish
将发布到 repo
文件夹的 Maven 回购结构,然后您可以从不同的项目使用它。
2。使用已发布的 .aar
在另一个 android 项目中,使用 #1 中发布的 aar:
在顶层 build.gradle:
allprojects {
repositories {
jcenter()
maven {
url "D:/full/path/to/repo"
}
}
}
将早期仓库的路径添加为 Maven 仓库。请注意,您可能必须使用完整路径,因为 $buildDir
对于此项目具有不同的值。在您的应用中 build.gradle:
dependencies {
...
other dependencies
...
implementation ('com.example:example:0.0.1-SNAPSHOT@aar'){transitive=true}
}
transitive=true
是从 pom 文件中获取传递依赖项所必需的。
事情发生了一些变化,下面是您如何使用最新版本的 gradle
在本地创建包(aar 和 pom)
修改您的库 build.gradle
文件以包含
apply plugin: 'maven-publish'
android {
...
...
}
dependencies {
...
...
}
publishing {
publications {
maven(MavenPublication) {
groupId 'com.domain' //You can either define these here or get them from project conf elsewhere
artifactId 'name'
version '1.0.0'
artifact "$buildDir/outputs/aar/sdk-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each { dependency ->
if (dependency.name != 'unspecified') {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
运行 来自终端
./gradlew clean
./gradlew build
./gradlew --console=verbose publishToMavenLocal
已在 $HOME/.m2/repository/
创建了 aar
和 pom
文件
如何从不同的项目加载库
按以下方式修改项目的 build.gradle
:
allprojects {
repositories {
maven {
url "/Users/username/.m2/repository/"
}
google()
jcenter()
}
您可以使用 $rootDir
并设置相对路径。
将库添加为应用模块中的依赖项build.gradle
implementation 'com.domain:name:1.0.0'
因为我不能使用私有 maven 来共享我的库,所以我正在考虑共享 aar 并导入到另一个项目中。 当 aar 和 jar 文件不包含任何依赖项时,问题就来了。因此,一旦我在 android studio 中手动导入 aar(使用 Import .JAR/.AA Package),就没有依赖项了,我必须再次手动添加所有依赖项。 我已经通过 gradle 任务生成了一个 pom 文件,尽管我找不到任何方法在项目中手动导入它。
关于"Import .JAR/.AA Package"自动生成的build.gradle文件是:
configurations.maybeCreate("default")
artifacts.add("default", file('TestSample_1.0.0.aar'))
有没有办法也添加 pom/iml 文件?类似于:
artifacts.add("default", file('pomDependencies.xml'))
1。发布
在您的 aar 项目中,添加 maven-publish
插件并添加必要的插件配置。
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
...
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.novoda:bintray-release:0.2.7'
}
...
publishing {
publications {
maven(MavenPublication) {
groupId 'com.example' //You can either define these here or get them from project conf elsewhere
artifactId 'example'
version '0.0.1-SNAPSHOT'
artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
注意事项:
我们正在使用自定义 maven 发布,因此您必须使用
定义要发布的内容artifact
子句我们必须自己生成 pom,在上面的代码中我使用了所有编译配置依赖项,您可能需要确保涵盖所有您关心的配置。
运行 gradle publish
将发布到 repo
文件夹的 Maven 回购结构,然后您可以从不同的项目使用它。
2。使用已发布的 .aar
在另一个 android 项目中,使用 #1 中发布的 aar: 在顶层 build.gradle:
allprojects {
repositories {
jcenter()
maven {
url "D:/full/path/to/repo"
}
}
}
将早期仓库的路径添加为 Maven 仓库。请注意,您可能必须使用完整路径,因为 $buildDir
对于此项目具有不同的值。在您的应用中 build.gradle:
dependencies {
...
other dependencies
...
implementation ('com.example:example:0.0.1-SNAPSHOT@aar'){transitive=true}
}
transitive=true
是从 pom 文件中获取传递依赖项所必需的。
事情发生了一些变化,下面是您如何使用最新版本的 gradle
在本地创建包(aar 和 pom)
修改您的库 build.gradle
文件以包含
apply plugin: 'maven-publish'
android {
...
...
}
dependencies {
...
...
}
publishing {
publications {
maven(MavenPublication) {
groupId 'com.domain' //You can either define these here or get them from project conf elsewhere
artifactId 'name'
version '1.0.0'
artifact "$buildDir/outputs/aar/sdk-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each { dependency ->
if (dependency.name != 'unspecified') {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
运行 来自终端
./gradlew clean
./gradlew build
./gradlew --console=verbose publishToMavenLocal
已在 $HOME/.m2/repository/
aar
和 pom
文件
如何从不同的项目加载库
按以下方式修改项目的 build.gradle
:
allprojects {
repositories {
maven {
url "/Users/username/.m2/repository/"
}
google()
jcenter()
}
您可以使用 $rootDir
并设置相对路径。
将库添加为应用模块中的依赖项build.gradle
implementation 'com.domain:name:1.0.0'