如何使用gradle在编译阶段添加依赖jar文件?

时间:2015-04-15 09:28:36

标签: java android gradle

我使用Android构建我的Gradle应用程序。

在编译阶段检索依赖jar文件,这些jar文件的路径是动态的(因为路径中有内部编号,例如 / home / user1 / workspace / myapp / libs / privatejar /建立-1019 / a.jar文件)。

我的gradle配置文件如下所示。

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    applicationVariants.all { variant ->
        variant.javaCompile.dependsOn('GetJarUsingCompanyPrivateProtocol')
    }
}

dependencies {
    compile files('local/path/of/company/private/jar')
}

task GetJarUsingCompanyPrivateProtocol {
    // This command will retrieve the jar
    // into folder "local/path/of/company/private/jar"
    commandLine 'get_jar_command'
}

因为第一次执行gradle compile命令之前jar文件不存在,所以总是会抱怨“找不到类*”。 但是,如果我第二次执行gradle编译,它将起作用。

所以我在这里有两个问题:

  1. 每当我的jar文件的内部版本号发生变化时,我必须更改 local / path / of / company / private / jar
  2. 有没有机会让我的gradle脚本第一次工作?
  3. 我知道我可以执行 get_jar_command ,然后触发gradle版本,但这很烦人,我可以一次性完成吗?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。

Gradle构建有三个不同的阶段:

  1. 初始化
  2. 配置
  3. 执行
  4. 依赖关系块将在配置阶段执行。因此,要在依赖关系块中使用依赖关系jar,必须在初始化阶段或配置阶段但在依赖关系块执行之前下载依赖关系jar。

    就我而言,不使用初始化阶段。所以我必须确保在依赖阻止之前下载依赖jar。简单来说,调整块序列就可以了。

    apply plugin: 'android'
    
    android {
        compileSdkVersion 19
        buildToolsVersion "19.1.0"
    
        applicationVariants.all { variant ->
            variant.javaCompile.dependsOn('GetJarUsingCompanyPrivateProtocol')
        }
    }
    
    task GetJarUsingCompanyPrivateProtocol {
        // This command will retrieve the jar
        // into folder "local/path/of/company/private/jar"
        commandLine 'get_jar_command'
    }
    
    dependencies {
        compile files('local/path/of/company/private/jar')
    }
    

    注意:doLast of task中的逻辑将在执行阶段执行。这就是我使用

    的原因
    task GetJarUsingCompanyPrivateProtocol {
        commandLine 'get_jar_command'
    }
    

    无论

    task GetJarUsingCompanyPrivateProtocol {
        doLast {
            commandLine 'get_jar_command'
        }
    }
    

    ,也不

    task GetJarUsingCompanyPrivateProtocol << {
        commandLine 'get_jar_command'
    }