在自定义任务中使用 'configurations.runtime.asPath' 时,Gradle war 忽略传递依赖关系

标签 gradle

我面临着我无法解释的行为,使用 gradle 1.10 我有:

settings.gradle:

include('lib1', 'lib2', 'web')

build.gradle:
subprojects {
  apply plugin: 'java'
}

project(':web') {
  apply plugin: 'war'
  dependencies {
    compile project(':lib1')
  }

  task myTask(type: JavaExec, dependsOn: 'compileJava') {
        main = "some.thirdparty.Class"
        args "--searchPath", configurations.runtime.asPath
  }

}

project(':lib1') {
  dependencies {
    compile project(':lib2')
  }
}

project(':lib2') {
}

当我运行 gradle clean war我只有 lib1.jarwar/build/libs/web.war/WEB-INF/lib .

制作 WEB-INF/lib包含lib1.jarlib2.jar我必须:
  • 移动 project('web') block 到文件末尾
  • 更新 configurations.runtime.asPathconfigurations.runtime (但我需要提供类路径作为路径,所以不是解决方案)

  • 我读了build lifecycle描述,试图比较 --debug 输出,但这没有帮助。

    为什么会这样?将模块运行时类路径作为 JavaExec 任务中的路径提供什么是一个好的解决方案?

    最佳答案

    asPath解析配置,但只有在执行时而不是配置时(特别是在存在项目依赖项的情况下),解析才会正确工作。尝试包装 args符合 doFirst { ... } .

    关于在自定义任务中使用 'configurations.runtime.asPath' 时,Gradle war 忽略传递依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22523790/

    相关文章:

    java - 在 gradle 中添加 github 库作为依赖项

    java - 从终端运行 Gradle 程序时出现问题

    android - 使用库模块构建应用程序找不到 AndroidManifest.xml

    gradle - 为什么Android Gradle Maven发布神器bundleRelease未找到

    android-studio - 使用具有不同版本 Android 依赖项的相同库的两个或多个库之间的冲突

    java - gradle如何解析字符串表示法中的依赖项

    gradle - Gradle分发任务输出文件不在ZIP的根目录

    android - Android Studio,等级:请使用-dontwarn或-ignorewarnings禁止显示它们

    java - 在 Gradle 中使用 Proguard - 找不到引用的类 java.lang.String

    android - 位置 gradle dependencies/android studio 插件,Android Studio 1.3