如何在Gradle代码中获取给定项目的依赖项?

时间:2014-09-16 15:28:34

标签: gradle dependencies jnlp

修改

在我们的构建过程中,我们构建了一些应用程序,这些应用程序是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\"/>") 
    }
}

2 个答案:

答案 0 :(得分:2)

您没有说明您宣布项目列表的方式。 如果所有项目配置对他都可见,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) {
    //
}

等等。

答案 1 :(得分:1)

假设项目已应用java插件:

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