【问题标题】:How to call a task separately in gradle如何在gradle中单独调用任务
【发布时间】:2015-06-29 10:04:46
【问题描述】:

我的 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。

我是 gradle 的新手,所以不确定。

它仍在构建 build2.jar,我不确定它为什么会发生.. 有人可以在这里帮助我吗?

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

【问题讨论】:

    标签: java gradle build


    【解决方案1】:

    在配置 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插件,不需要任何配置。

    【讨论】:

    • 你能详细说明一下吗?从 ... { ... }
    • 我同意你的看法,但在这种情况下,我会有很多我不想要的子项目,所以我只想让 1 个 build.gradle 有不同的任务。
    • 详细说明什么?你读过docs.gradle.org/current/dsl/…吗?
    • 在我提到的java文件的路径中,现在它正在构建build1.jar,但在它里面它打包了java文件,理想情况下应该是类文件。它应该先编译它。
    • from 不应指向源代码,而应指向已编译的类目录。 SourceSets.main.output 之类的东西(参见docs.gradle.org/current/dsl/…
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2016-11-18
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多