我正在使用Gradle构建一个Android库项目,并将其作为AAR部署到maven存储库中。
该库有一些依赖项,应该包含在POM中
在apply plugin:'maven'
中没有POM文件,只有工件
使用apply plugin:'maven-publish'
会生成POM文件,但它不包含任何依赖项
有什么想法吗?难道这就是不支持吗?
Gradle2.2和Android Gradle插件1.1.0
第一种方法:
configurations {
archives {
extendsFrom configurations.default
}
}
afterEvaluate { project ->
uploadArchives {
configuration = configurations.archives
repositories {
mavenDeployer {
repository(url: "http://nexus-url") {
authentication(userName: nexusUsername, password: nexusPassword)
pom.groupId = 'com.example'
pom.version = '123-SNAPSHOT'
pom.artifactId = 'foo'
pom.packaging = 'aar'
pom.project {
artifactId = 'bar'
packaging 'aar'
description 'baz'
}
}
}
}
我也尝试了它,但没有将其包装在afterevalue
中
第二种方法:
publishing {
publications {
sdk(MavenPublication) {
groupId 'com.example'
artifactId 'foo'
version = "0.123-SNAPSHOT"
artifact("$buildDir/outputs/aar/app-sdk-debug.aar")
}
}
repositories {
maven {
url "http://nexus-url"
credentials {
username 'foo'
password 'bar'
}
}
}
}
更新
问题的根本原因是这个项目使用了口味。使用apply plugin:'maven'
时,在没有味道的情况下可以正确生成pom
试用MavenDeployer:http://gradle.org/docs/current/userguide/mavenplugin.html
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/tmp/myRepo/")
pom.version = '1.0Maven'
pom.artifactId = 'myMavenName'
}
}
}
您可以在这里设置pom详细信息。您将获得一个名为uploadarchives
的新目标。当执行时,它将部署到给定的回购。
这是最终对我起作用的解决方案:
publishing {
publications {
sdk(MavenPublication) {
artifactId libName
artifact "${project.buildDir}/outputs/aar/${libName}-${project.version}.aar"
//The publication doesn't know about our dependencies, so we have to manually add them to the pom
pom.withXml {
// for dependencies and exclusions
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dp.group)
dependencyNode.appendNode('artifactId', dp.name)
dependencyNode.appendNode('version', dp.version)
// for exclusions
if (dp.excludeRules.size() > 0) {
def exclusions = dependencyNode.appendNode('exclusions')
dp.excludeRules.each { ExcludeRule ex ->
def exclusion = exclusions.appendNode('exclusion')
exclusion.appendNode('groupId', ex.group)
exclusion.appendNode('artifactId', ex.module)
}
}
}
}
}
}
repositories {
maven {
name 'myrepo'
url 'https://maven.foo.com'
credentials {
username mavenUsername
password mavenPassword
}
}
}
}
我刚刚将我的项目升级到gradle 7,并且遇到了缺失的可传递依赖项。我试着改变我的身材。gradle文件在依赖项中使用“api”,但这并没有修复它。 projectA依赖于projectB,projectB依赖于projectC。 projectA-build。格拉德尔 projectB-构建。格拉德尔 ProjectA编译良好,但有运行时错误-从project ectC获取类的ClassNot
我有一个图书馆项目。我想使用Android的新构建系统。目前我遇到了一个相当烦人的情况。 我在上定义了依赖项,但它们从未出现在Android Studio的外部库中。因此,对这些库的所有引用都被标记为错误。 更新 这个问题似乎在最新的Android Studio版本(0.2.5)上得到了修复
在我的反应/redux应用程序中,我使用调度来调用每次安装组件时从redux中的状态检索数据的操作。问题正在使用状态发生我的方式不工作 下面是我得到的错误: React Hook useEffect缺少依赖项:“dispatch”。包括它或删除依赖项数组。像“getInvoiceData”这样的外部作用域值不是有效的依赖项,因为对它们进行变异不会重新呈现组件react HOOK/DEP 这是我的密
我在Android Studio中有一个多模块设置,它由一个用于与API通信的纯java模块和一个使用该API模块的Android项目组成。要配置用户名和密码等API变量,我使用所有者(http://owner.aeonbits.org/)。整个构建没有问题。 我在 API 模块中使用了一个 Main-函数来测试事情是否运行良好,他们确实如此。我的问题是,当我尝试在 APi 模块上使用编译依赖项运
工具链: > Build#AI-171.4041253,构建于2017年5月24日JRE: 1.8。0_112-发布-b736x86_64JVM: OpenJDK 64位服务器VM by JetBrains s. r. o Mac OS X 10.12.5 Google SDK/工具:我下载了最新的“all”(Android O、工具、库等,至少根据Android Studio SDK管理器)。
在我的项目中,一切都很完美,但我明白这一点。 所以我应该在我的gradle文件中添加google-service。 这些是我的依赖。 基本上,我使用GoogleAppClient对象来获取我的当前位置。我与地图或GCM无关。 有没有办法解决这个问题?我环顾四周,但还是有问题。 谢谢。