Gradle构建具有传递依赖性的多模块项目

时间:2015-05-12 21:18:20

标签: java gradle

我在构建简单应用时遇到问题。它包含3个模块,ejb,休息和耳朵,其中应包括休息。为了实现它,我在下面编写了build.gradle。但我还是有问题。内置耳朵看起来像:

ear-1.0.ear
|--ejbs-1.0.jar
|--rest-1.0.jar
|--lib
   |--ejbs-1.0.jar
   |--other libs..

如您所见,我在这里重复了ejbs-1.0.jar。这不是我想要的东西所以我试图解决这个问题。我尝试过在网上找到的两种方法,但它们都没有用。第一个(带有标签1的注释)排除了进入lib目录的所有rest依赖项。第二个(标签2)做了同样的事情,但也将rest-1.0.jar包含在lib中,使其更糟糕。 现在我不知道如何编写我的build.gradle所以它将子项目中的jar放在根目录中,并将它们的依赖项放在lib目录中。我也尝试用标签3写一些类似注释的内容,但这会使脚本失败。是否有简单的方法将其排除在类似语法之外?

project(":ejbs") {
    apply plugin: "java"

    dependencies {
        compile group: 'javax.ejb', name: 'javax.ejb-api', version: '3.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.2'
    }
}

project(":rest") {
    apply plugin: "java"

    dependencies {

        compile project(':ejbs')
        compile group: 'javax.ejb', name: 'javax.ejb-api', version: '3.2'
        compile group: 'javax.ws.rs', name: 'jsr311-api', version: '0.11'
        compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.2'
        compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.2'
    }
}

project(":ear") {
    apply plugin: "java"
    apply plugin: "ear"

    dependencies {
        //1: def nonTransitive = {transitive = false}
        deploy project(":ejbs")
        deploy project(":rest")
        earlib project(path:":ejbs", configuration:"compile")
        earlib project(path:":rest", configuration:"compile")//1: , nonTransitive
        //2: add('earlib', project(':rest')) {
        //    transitive = false
        //}
        //3: earlib project(path:":rest", configuration:"compile") {
        //    exlude project(':ejbs')
        //}
    }
}

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。我是这样做的:

Func<string, User> CreateUser = (string email) =>
{
    User user = context.Users.SingleOrDefault(u => u.UserName == email);

    // ...
    return user;
};
{
    // New scope - user is not contained in a shared scope. This is OK.

    var user = CreateUser("email@email.email");
    userManager.AddToRole(user.Id, "Administrator"); 
}