java - 定义我的所有 gradle 项目都可以看到的属性集

标签 java gradle

我有以下 ext.libraries 定义,我想将其公开给我使用 gradle 构建的所有项目。我该怎么做呢。我可以在哪里定义它,以便我的项目可以全局使用它?

我的项目结构如下:

 --projects
        ----BaseFrameWork
        ----ProjectA
        ----ProjectB

settings.gradle(项目目录)

includeFlat 'BaseFramework', 'ProjectA', 'ProjectB'

build.gradle(项目目录)

ext.libraries = [
    lib_core:[
        ":junit:4.0:",
        ":log4j:1.2.8:",
        ":ojdbc6:",
        ":struts:1.1-tiger:"
    ],
    lib_jaxb: [
        ":jaxb-api:2.1.3:",
        ":jaxb-impl:2.1.3:"
    ]
]    

allprojects {
    apply plugin: 'java'        
}

build.gradle(BaseFramework 目录)

apply plugin: 'java'
sourceSets.main.java.srcDir  'src/java' 
println "The root project is: " + rootProject
compileJava {
    options.compilerArgs << '-nowarn'
}

jar {
    manifest {
        attributes("Implementation-Title": "BaseFramework", "Implementation-Version": "1")
    }
    from ('./META-INF/') {
        include 'DomainConfig.xml'
        into('META-INF')
    }
}

repositories {
    flatDir dirs: "D:/myrepo"
}

dependencies {
    compile libraries.lib_commons
    compile libraries.lib_core
    compile libraries.lib_jaxb
}

然后我尝试以下操作并收到错误。它无法在根 build.gradle 文件中看到我的库属性。看起来它也将我的 BaseFramework 项目视为根?

D:\projects>cd BaseFramework    
D:\projects\BaseFramework>gradle build
The root project is: root project 'BaseFramework'

FAILURE: Build failed with an exception.

* Where:
Build file 'D:\prod\BaseFramework\build.gradle' line: 25

* What went wrong:
A problem occurred evaluating root project 'BaseFramework'.
> Could not find property 'libraries' on root project 'BaseFramework'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2.624 secs

D:\projects\BaseFramework>

请帮忙:(

最佳答案

将其放在任何部分之外的顶级 build.gradle 中。然后您可以从任何子项目访问它。

您还需要在 settings.gradle 中将 includeFlat 替换为 include,否则它会期望在与projects 目录。

includeFlat 告诉 Gradle 这些同级目录应被视为子项目。在您的情况下,BaseFrameworkProjectAProjectB 不是 projects 目录的同级目录,它们是子目录。

另一方面,include 告诉 Gradle 这些目录应被视为子项目。这就是您想要的,因此子项目可以继承 projects 中声明的变量。

关于java - 定义我的所有 gradle 项目都可以看到的属性集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16845831/

相关文章:

android - 如何使用 Gradle 为 Android 构建发布测试 apk?

java - HashMap 转换为 JSONObject, HashMap 项值中的每个 `/` 将替换为这个 `\/`

java - 在带有整数和数学/逻辑错误的 If 语句中使用更短版本的 或 "||"?

java - 使用 XSLT 从 xml 文件的父标签和子标签获取值

gradle - 插件扩展名与任务名称冲突

java - 过渡到 OpenJDK/OpenJFX [多模块 Maven 项目]

java - IntelliJ 无法使用 gradle 或 maven 找到库

Java连接OracleDB : java. sql.SQLRecoverableException: IO error: The pipe has been cut

java - 构建类层次结构的最佳方法?

gradle - 如何在 Android Studio 中为 ActionBarSherlock 正确设置 Gradle?