我有一个使用React-Native的项目。我building the RN module from source,所以我的项目将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错误
无法获取未知财产' repositoryUrl'对于项目 ':ReactAndroid'类型为org.gradle.api.Project。
有人可以帮忙吗?
答案 0 :(得分:16)
嗯,结果很有趣。
错误指向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
。在我们的例子中,getter是
def getRepositoryUrl() {...}
对here进行了含糊的解释。
然而,还有另一种检查属性的方法,它忽略了名为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') : ''
}
从源here构建RN模块时遇到更多麻烦。
答案 1 :(得分:0)
使用项目的功能 hasProperty 可能更好。
如下所示:
def getRepositoryUrl() {
return project.hasProperty('repositoryUrl') ? property('repositoryUrl') : 'https://oss.sonatype.org/service/local/staging/deploy/maven2/'
}
def getRepositoryUsername() {
return project.hasProperty('repositoryUsername') ? property('repositoryUsername') : ''
}
def getRepositoryPassword() {
return project.hasProperty('repositoryPassword') ? property('repositoryPassword') : ''
}
问题是由gradle从2.x升级到3.x引起的。因此,我发现更高版本的react-native(例如0.57.4)在ReactAndroid / release.gradle中具有上述脚本,并且可以正常工作。