如何在gradle中单独调用任务

时间:2015-06-29 10:04:46

标签: java gradle build

我的build.gradle文件如下所示。

apply plugin: 'java'

repositories {
    maven {
      mavenCentral()
}

dependencies {    
  compile "commons-logging:commons-logging:1.0.4",
          "commons-codec:commons-codec:1.3"      
 } 

jar {
    manifest{            
            attributes ("Product-Name" : project.name, "${manifestSectionName}")
            attributes ("Product-Display-Name" : project.description, "${manifestSectionName}")
            }                                
    }

task build1  {
 sourceSets {
   main {
      java {
         srcDirs = ['src/java/com/abc/xyz/dir1']
      }
    }   
  }
  buildDir = 'op'
  jar{
  archiveName = 'build1.jar'
  }
}

task build2  {
 sourceSets {
   main {
      java {
         srcDirs = ['src/java/com/abc/xyz/dir2']
      }
    }   
  }
  buildDir = 'op'
  jar{
  archiveName = 'build2.jar'
  }
}

所以现在我想调用单个任务来构建单个jar,就像我们在Ant中调用单个目标一样。

所以当我调用它时:gw clean build build2 它以正确的方式构建build2.jar,但是当我运行它时:gw clean build build1,它仍然只构建build2.jar。

我很傻,所以不确定。

它仍在构建build2.jar,我不知道为什么会发生这种情况..有人可以帮助我吗?

请注意,这两项任务是相互独立的。

1 个答案:

答案 0 :(得分:0)

配置build1和build2时,您将配置唯一的,共享的主sourceSet和唯一的共享jar任务。由于build2是在build1之后配置的,因此它会覆盖build1设置的配置。

你想要的是构建中的两个额外任务,它们都创建一个具有不同内容的jar:

task build1(type: Jar) {
    dependsOn classes
    archiveName = 'build1.jar'
    from(sourceSets.main.output) {
        include '**/package1/**/*'
    }
}

task build2(type: Jar) {
    dependsOn classes
    archiveName = 'build2.jar'
    from(sourceSets.main.output) {
        include '**/package2/**/*'
    }
}

但这对我来说就像糟糕的设计。如果你想生成不同的jar,那么你应该有几个子项目,都使用java插件而不需要任何配置。