有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在gradle中单独调用任务

我的身材。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清洁建筑2 它的大楼是2号楼。jar的方式是正确的,但当我像这样运行它时:gw clean build build1,它仍然是build2。只有罐子

我对gradle很陌生,所以对此不确定

它仍然在建。只是罐子,我不知道为什么会这样。。有人能帮我吗

请注意,这两个任务彼此独立


共 (1) 个答案

  1. # 1 楼答案

    在配置build1和build2时,您正在配置唯一的、共享的主源集和唯一的、共享的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插件,不需要任何配置