Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 梯度绝对/相对路径_Java_Android_Gradle - Fatal编程技术网

Java 梯度绝对/相对路径

Java 梯度绝对/相对路径,java,android,gradle,Java,Android,Gradle,我有以下问题。当我想在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:错误:包com.pushlink.android不存在 导入com.pushlink.android.pu

我有以下问题。当我想在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:错误:包com.pushlink.android不存在 导入com.pushlink.android.pushlink

注意:某些输入文件使用或覆盖不推荐使用的API。 注意:有关详细信息,请使用-Xlint:deprecation重新编译。 4个错误

失败

失败:生成失败,出现异常

  • 出了什么问题: 任务“:app:compiledBugJava”的执行失败

    编译失败;有关详细信息,请参阅编译器错误输出

  • 尝试: 使用--stacktrace选项运行以获取堆栈跟踪。使用--info或>--debug选项运行以获得更多日志输出

构建失败

总时间:6.543秒

如果我将绝对路径添加到Jar中,项目将编译,所有内容都将运行:

compile files('C:/Users/Kai/AndroidStudioProjects/ProjectA/libs/PushLinkAndroid-5.3.0.jar')
看起来路径有问题,但当绝对路径运行正常时,怎么会出现这种情况

编辑: 格雷德尔先生

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")
路径是相对于此代码段所在的构建脚本计算的。因此,当您的
build.gradle
文件位于
/a/project/build.gradle
中时,jar应该位于
/a/project/relative/path/to/a.jar
中。 在多项目gradle构建中,您可以将jar放在相对于根项目的文件夹中,并通过

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

因此,考虑到这一点,重新检查你的渐变设置是否正确。

你的libs文件夹放错地方了。你必须把它放在
MigraeneBook/app
下,而不是直接放在
MigraeneBook
下。首先,我认为添加手动lib(如果可以避免的话)是不好的做法,因为你需要自己维护lib和路径

我快速地看了一下maven回购协议,似乎他们没有这个特定的lib。这就是我所期望的:

compile('com.anypackage.name.PushLinkAndroid-5.3.0.jar')
因为这可能不取决于你,而取决于开发团队,所以这是没有帮助的

现在来看看你的问题:你是从--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
}
如果我的猜测是正确的,您有两个选择:

  • 使用完整路径
  • 使用gradle内置路径,如buildDir,并根据示例替换\号(我不确定这是否与dependencies标记中的示例完全相同,可能您需要自己定义一个全局变量)
  • 让PushLink的开发人员将此库提交给Maven Repo

  • 指定每个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 }
    }
    

    上阅读更多信息我的问题是我从Android Studio IDE本身复制了它,就像从一个项目的libs上复制command+c和从另一个项目的libs上复制command+v一样。由于某些原因,AS生成大小为零的jar文件。。。但是,嘿,我学到了一些关于Gradle的新知识:)

    如果调用URL方案路径,可以使用以下示例:

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

    老问题,但可能会帮助别人。 我也遇到了同样的问题,我在项目根文件夹中有两个库,它不能使用相对路径。如果库位于项目的根文件夹中,请在相对路径之前添加../

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

    我试过了,但也没用。看起来gradle在这个相对路径上有一些问题?通常没有,所以我想这是局部问题。尝试
    gradlew clean
    ,有时它有助于解决此类问题。将您的
    build.gradle
    添加到问题plsbuild.gradle中添加@solarAbsolute Path:C:\Users\Kai\AndroidStudioProjects\MigraeneBook\libs*.jar build.gradle,这样MigraeneBook中的相对路径libs/*.jar应该是正确的
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ...
    implementation files('../library_name/libs/some.jar')