如何在Gradle中的多项目中给出依赖关系以及结构是什么?

时间:2013-05-10 07:38:53

标签: gradle build.gradle

我有一个使用Gradle构建的多项目,它有一个java项目,它将是web项目的依赖项。当我使用eclipse构建时,我已经将javaProj和webProj的依赖项提供给webprojectEAR并且它可以正常工作(部署后)。

.ear文件需要使用单个构建运行创建,其中包含以下内容。

- lib
    javaProj.jar
- META-INF
- webProj.war

我的项目结构如下

- javaProj
     build.gradle
- webProj
     build.gradle
- webProjEAR
     build.gradle
- settings.gradle

我正在尝试运行webProjEAR / build.gradle文件,并在其中作为依赖项给出。

project(':webProjEAR') {
    dependencies { 
         compile project(':javaProj')
         compile project(':webProj')
    }
}

失败,错误“无法解析配置的所有依赖关系'webProjEAR:testRuntime'。当我分开运行构建文件时,我能够创建jar和war文件。

任何人都可以帮助我如何在构建文件中提到依赖关系。而且,有一个build.gradle文件的疯狂位置在哪里。

===更多信息从这里添加到原始问题===

我的构建文件如下。我已经做了Igor Popov提到的改变。

// javaProj/build.gradle

apply plugin: 'java'

repositories {
flatDir { dirs "../local-repo" }                        
}

sourceSets {
    main {
        java.srcDir "$projectDir/src"           
        resources.srcDir "$projectDir/XML"      
    }
}

jar {
    from ('classes/com/nyl/xsl') { 
        into 'com/nyl/xsl'      
    }
}

dependencies {
    compile group: 'slf4j-api' , name: 'slf4j-api' , version: '1.5.6'
    compile group: 'slf4j-jdk14' , name: 'slf4j-jdk14' , version: '1.5.6'   
    compile group: 'com.ibm.xml.thinclient_1.0.0' , name: 'com.ibm.xml.thinclient_1.0.0' , version: '1.0.0'
    compile group: 'junit', name: 'junit', version: '4.11'
    compile group: 'saxon9' , name: 'saxon9'
    compile group: 'saxon9-dom' , name: 'saxon9-dom'
    compile group: 'xmlunit' , name: 'xmlunit' , version: '1.4'
}

==============================================

// webProj/build.gradle

apply plugin: 'war'

repositories {
    flatDir { dirs "../local-repo" }                    
}

webAppDirName = 'WebContent'                

dependencies {
    providedCompile group: 'com.ibm.xml' , name: 'com.ibm.xml' 
    providedCompile group: 'com.ibm.ws.prereq.xdi2' , name: 'com.ibm.ws.prereq.xdi2' 
    providedCompile group: 'com.ibm.ws.xml.admin.metadata' , name: 'com.ibm.ws.xml.admin.metadata' 
    providedCompile group: 'guava' , name: 'guava' , version: '11.0.2'
    providedCompile group: 'j2ee' , name: 'j2ee'    
    providedCompile group: 'slf4j-api' , name: 'slf4j-api' , version: '1.5.6'
    providedCompile group: 'slf4j-log4j12' , name: 'slf4j-log4j12' , version: '1.5.6'   
}

====================================================

// webProjEAR/build.gradle

apply plugin: 'java'
apply plugin: 'ear'

repositories {
    flatDir { dirs "../local-repo" }
}

dependencies {
    compile project(':javaProj')
compile project(':webProj')
}

ear {
    appDirName 'src/main/app' 
    libDirName 'APP-INF/lib' 

    from ('../javaProj/build/libs') {
        into 'lib'
    }       
    from ('../webProj/build/libs') {
        into '/'
    }
} 

我想知道roojProj / build.gradle文件中应包含的内容。还想知道上述文件中需要更改的任何内容。感谢

1 个答案:

答案 0 :(得分:2)

整体结构应该是这样的:

rootProj
  javaProj
    build.gradle
  webProj
    build.gradle
  webProjEAR
    build.gradle

  settings.gradle
  build.gradle

settings.gradle文件应包含:

include 'javaProj', 'webProj', 'webProjEAR'

对于webProjEAR/build.gradle,您可以删除project(':webProjEAR')。所以看起来应该是这样的:

dependencies { 
  compile project(':javaProj')
  compile project(':webProj')
}

要解决您收到的错误,您还应该发布webProjEAR的所有依赖项(如果您还有其他未包含的内容)。