簡體   English   中英

Gradle絕對/相對路徑

[英]Gradle absolute / relative path

我有以下問題。 當我想在我的Gradle依賴項中使用本地jar時。

如果我只是添加:

compile files('libs/PushLinkAndroid-5.3.0.jar')

它不起作用。

C:\\ Users \\ Kai \\ AndroidStudioProjects \\ ProjectA \\ app \\ src \\ main \\ java \\ de \\ xyz \\ xxx \\ projecta \\ BaseActivity.java:21:error:package com.pushlink.android不存在import com.pushlink.android .PushLink;

注意:某些輸入文件使用或覆蓋已棄用的API。 注意:使用-Xlint重新編譯:棄用以獲取詳細信息。 4個錯誤

失敗

FAILURE:構建因異常而失敗。

  • 出了什么問題:任務執行失敗':app:compileDebugJava'。

    編譯失敗; 請參閱編譯器錯誤輸出以獲取詳細信

  • 嘗試:使用--stacktrace選項運行以獲取堆棧跟蹤。 使用--info或> - debug選項運行以獲取更多日志輸出。

建築失敗

總時間:6.543秒

如果我添加Jar的絕對路徑,項目編譯,一切正常:

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')

看起來路徑有問題但是當絕對路徑工作正常時怎么可能呢?

編輯: Build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "de.xyz.kai.migraenebook"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    //compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile project(':volley')
    debugCompile 'im.dino:dbinspector:3.2.1@aar'
    compile 'de.hdodenhof:circleimageview:1.3.0'
    compile 'com.android.support:recyclerview-v7:+'
    //compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libs/PushLinkAndroid-5.3.0.jar')
    compile files('libs/PushLinkAndroid-5.3.0.jar')
    //compile files('libraries/PushLinkAndroid-5.3.0.jar')
    //compile files('C:/Users/Kai/AndroidStudioProjects/MigraeneBook/libraries/PushLinkAndroid-5.3.0.jar')
}

注意:我嘗試了不同的文件夾,PushLink.jar位於“libs”和“libraries”中。 它使用哪個命令或注釋掉並沒有什么區別 - 絕對路徑是有效的,相對不是。

試試這個,它將包括本地存儲庫中的所有JAR,因此您不必每次都指定它:

dependencies {
   compile fileTree(dir: 'libs', include: ['*.jar'])
}

此外,您應該知道通過引用文件時

files("relative/path/to/a.jar")

path是相對於此片段所在的buildscript進行評估的。所以當你的build.gradle文件位於/a/project/build.gradle ,jar應該在/a/project/relative/path/to/a.jar 在多項目gradle構建中,您可以將jar放在相對於根項目的文件夾中,並通過所有子項目引用它

rootProject.files("relative/to/root/a.jar")

因此,請考慮此問題並重新檢查您的gradle設置是否正確。

在我看來,首先添加手動庫 - 如果可以避免 - 是不好的做法,因為你需要自己維護lib和路徑。

我快速瀏覽了maven repo,似乎他們沒有這個特定的lib。 這是我所期望的:

compile('com.anypackage.name.PushLinkAndroid-5.3.0.jar')

由於這可能不是你自己而不是https://www.pushlink.com/changelog.xhtml的開發團隊,因此無法提供幫助。

現在問題:你是否用--stacktrace開始構建?

從我可以從中收集到的

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')

你正在使用Windows系統。 這在某些方面很麻煩,因為Gradle期望路徑看起來像這樣:

C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar

我瘋狂的猜測是,當你沒有自己指定路徑時,gradle會做這樣的事情:

C:\Users\Kai\AndroidStudioProjects\ProjectA\libs/PushLinkAndroid-5.3.0.jar

您可以使用此gradle任務驗證行為:

task printBuildDir() {
    def buildDir = "${buildDir}"
    println buildDir
    def fixedDir = buildDir.replaceAll('\\\\', '/')
    println fixedDir
}

如果我的猜測是正確的,你有兩個選擇:

  1. 使用完整路徑
  2. 使用gradle內置路徑(如buildDir)並相應地替換示例(我不確定這是否與我在依賴項標簽中的示例完全相同,也許您需要自己定義一個全局變量)
  3. 讓PushLink的開發人員將這個庫添加到Maven Repo

如果您調用URL方案路徑,則可以使用此示例:

def path = "file://${projectDir}/ojdbc6.jar"

你的libs文件夾放錯了地方。 你必須把它放在MigraeneBook/app ,而不是直接放在MigraeneBook下。

指定每個JAR文件名也是一種可能性。

dependencies {
    compile files('lib/dependency_one.jar', 'lib/dependency_two.jar')
}

這將告訴Gradle在編譯期間包含dependency_one.jar和dependency_two.jar。 要確認編譯配置中包含所有必需的JAR,您可以創建此幫助程序任務,

task listJars << {
    configurations.compile.each { File file -> println file.name }
}

然后運行它,

$ gradle -q listJars
hibernate-core-3.6.7.Final.jar
antlr-2.7.6.jar
commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-3.2.0.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
jta-1.1.jar
slf4j-api-1.6.1.jar

欲了解更多信息, 訪問https://docs.gradle.org/current/userguide/declaring_dependencies.html

老問題,但可能會幫助某人。 我有同樣的問題,我在項目根文件夾中有2個庫,並且它不適用於相對路徑。 如果您的庫位於項目的根文件夾中,請在相對路徑之前添加../。

implementation fileTree(dir: 'libs', include: ['*.jar'])
...
implementation files('../library_name/libs/some.jar')

我的問題是我從Android Studio IDE本身復制它,就像libs上的命令+ c從一個項目和命令+ v到另一個項目的libs。 出於某種原因,AS生成大小為零的jar文件......但是嘿,我學到了一些關於Gradle的新東西:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM