作者:张鹏22_981 | 来源:互联网 | 2023-02-03 21:34
我有一个使用React-Native的项目.我正在从源代码构建RN模块,因此我的项目将ReactAndroid模块作为依赖项.
我试图将项目升级到Android gradle构建工具> = 2.3.2,所以我可以使用intant-run:
buildscript {
repositories {
jcenter()
mavenLocal()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
...
}
}
这一变化迫使我将gradle本身从3.1升级到3.5(最新稳定).
构建项目会突然产生以下gradle错误
无法为org.gradle.api.Project类型的项目':ReactAndroid'获取未知属性'repositoryUrl'.
有人可以帮忙吗?
1> Vaiden..:
好吧,结果很有趣.
原因
错误指向React-Native模块的这一行release.gradle
:
def getRepositoryUrl() {
return hasProperty('repositoryUrl') ? property('repositoryUrl') : 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
}
奇怪的是,问题在于hasProperty('repositoryUrl')
返回true
,同时property('repositoryUrl')
导致错误.
在gradle 3.1上,hasProperty('repositoryUrl')
返回false
.
显然在gradle 3.5中,在物业确实缺失但仍有吸气剂的情况下hasProperty()
返回true
.在我们的例子中,吸气剂是
def getRepositoryUrl() {...}
这里含糊不清地解释了这一点.
然而,还有另一种检查属性的方法,它忽略了名为findProperty的 getter .
修复
所以解决方法是更改以下块release.gradle
:
def getRepositoryUrl() {
return hasProperty('repositoryUrl') ? property('repositoryUrl') : 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
}
def getRepositoryUsername() {
return hasProperty('repositoryUsername') ? property('repositoryUsername') : ''
}
def getRepositoryPassword() {
return hasProperty('repositoryPassword') ? property('repositoryPassword') : ''
}
对此:
def getRepositoryUrl() {
return findProperty('repositoryUrl') != null ? property('repositoryUrl') : 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
}
def getRepositoryUsername() {
return findProperty('repositoryUsername') !=null ? property('repositoryUsername') : ''
}
def getRepositoryPassword() {
return findProperty('repositoryPassword') != null ? property('repositoryPassword') : ''
}
在这里从源代码构建RN模块时遇到了更多的麻烦.