2017-05-14 66 views
3

我有一個使用React-Native的項目。我是building the RN module from source,所以我的項目將ReactAndroid模塊作爲依賴項。無法獲得項目的未知屬性'repositoryUrl'

我試圖升級項目到Android gradle這個構建工具> = 2.3.2,所以我可以使用intant運行:

buildscript { 
    repositories { 
     jcenter() 
     mavenLocal() 
     maven { url 'https://maven.fabric.io/public' } 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.3.2' 
     ... 
    } 
} 

這種變化迫使我從3.1升級gradle這個本身到3.5(最新穩定)。

建設項目突然產生以下錯誤的gradle

無法獲取不明財產「repositoryUrl」項目 :類型org.gradle.api.Project的「ReactAndroid」。

任何人都可以幫忙嗎?

回答

8

好吧,這個變成了有趣的事情。

的原因指出,這條線

錯誤的陣營,本機模塊的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() {...} 

這隱約地解釋了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模塊經歷。

相關問題