【问题标题】:How do I get the dependencies for a given project in Gradle code?如何在 Gradle 代码中获取给定项目的依赖项?
【发布时间】:2014-11-10 10:33:52
【问题描述】:

编辑

在我们的构建过程中,我们构建了一些 webstart 应用程序。这些项目中的每一个都有一个 pom 并使用 Maven 构建。构建过程的下一步是构建 webapp,其中包含每个应用程序的 jnlps 和 jars。我正在尝试构建包含 Gradle 中所有内容的 jnlps 和 webapp,因为 Gradle 给了我更多的灵活性。在我们之前的构建系统中,一切都在 Ant 中完成。

我想创建一个 gradle 脚本,它将为每个项目生成 jnlp 文件。我想创建一个 webstart 应用程序列表,如下所示

projects = ['com.company:project1:1.0', 
            'com.company:project2:1.0', 
            'com.company:project3:1.0']

然后循环遍历每个项目,然后遍历每个依赖项以生成项目的xml,如下所示:

<jnlp spec="1.0" codebase = "..." href="...">
    <!-- Other stuff goes here -->
    <resources> 
        <jar href="lib/jython-2.5.3.jar"/>
        <jar href="lib/commons-collections-3.2.1.jar"/>
        <jar href="lib/xercesImpl-2.8.1.jar"/>
        <!--- Other dependencies go here --->
    </resources>
</jnlp>

如何在 gradle 代码中遍历项目列表的依赖关系?在伪代码中,我想做这样的事情:

projects = ['com.company:project1:1.0', 
            'com.company:project2:1.0', 
            'com.company:project3:1.0']

for (project: projects) {
    def fileName = "$project.name().jnlp"
    File file = new File (fileName)
    for (dependency: project) {
        file.writeln("<jar href=\"lib/$dependency.fileName\"/>") 
    }
}

【问题讨论】:

    标签: gradle dependencies jnlp


    【解决方案1】:

    您没有说明您声明项目列表的方式。 如果您的所有项目配置对他可见,Gradle 可以解决您的依赖关系。 这意味着您需要为每个项目构建 gradle 版本,以及要打印哪些依赖项。

    根据您的问题,您可以将每个项目定义为单个 java 模块,例如在我们的项目中,我们有这样的结构

    -our_project[our-project]
       -modules (folder)
           -core   [our-project-core]   (java module)
           -web    [our-project-web]    (java module)
           -portal [our-project-portal] (java module)
       -build.gradle
       -settings.gradle
       -gradle.properties
    

    每个模块都有自己的 gradle 配置。

    这是 settings.gradle 文件的内容

    rootProject.name = 'our-project'
    include(':our-project-core', ':our-project-web', ':our_project-portal')
    project(':our-project-core').projectDir = new File(settingsDir, 'modules/core')
    project(':our-project-web').projectDir = new File(settingsDir, 'modules/web')
    project(':our-project-portal').projectDir = new File(settingsDir, 'modules/portal')
    

    在这种情况下 build.gradle 的内容将是:

    ....
    def coreModule = project(':our-project-core')
    def webModule = project(':our-project-web')
    def portalModule = project(':our-project-portal')
    
    configure(coreModule) {
        //core module configurations here like
        dependencies {
        compile("org.apache.commons:commons-io:1.4") //for example
        ....
        }
    }
    
    configuration(webModule) {
        //
    }
    

    等等。

    【讨论】:

    • 谢谢。我会试试的。
    【解决方案2】:

    假设项目应用了java 插件:

    for (file in project.configurations.runtime) {
        println file
    }
    

    【讨论】:

    • 感谢您的快速回复。如何将 'com.company:project1:1.0' 转换为项目对象?我有 4 或 5 个我想要构建的 jnlp,我想在同一个 gradle 文件中完成它们,因为它们都进入同一个 Web 应用程序。
    • 立即从Project 对象开始更容易。
    • 我可以在我的 gradle 文件中定义 5 个不同的项目,因为我有 5 组不同的依赖项吗?
    • 不确定是否很好地理解了这个问题,但基本上单个 build.gradle 文件是单个 project
    猜你喜欢
    • 2013-11-30
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2013-01-30
    相关资源
    最近更新 更多