2015-05-18 51 views
6

(这是使用gradle 2.4)如何让gradle的构建任务生成“常规”jar的阴影jar _instead_?

对于我的一个项目,拆分成几个子模块,我使用shadow plugin这非常适合我的需求;它有一个main,并且按照插件的README建议,我使用应用程序插件与它结合,以便在清单中生成Main-Class,所有工作都很好。

现在,这是一个SonarQube插件项目,我也使用(成功!)gradle sonar packagin plugin。而这个插件的功能是当你使用./gradlew build时,生成声纳插件而不是“常规”罐子。

我要为我的子项目做同样在这里,但我希望它仅生成阴影罐子的插件,而不是“常规”插件......现在我生成使用这个简单的文件都:

buildscript { 
    repositories { 
     jcenter(); 
    } 
    dependencies { 
     classpath(group: "com.github.jengelman.gradle.plugins", 
      name:"shadow", version:"1.2.1"); 
    } 
} 

apply(plugin: "application"); 
apply(plugin: "com.github.johnrengelman.shadow"); 

dependencies { 
    // whatever 
} 

mainClassName = //whatever 

artifacts { 
    shadowJar; 
} 

// Here is the hack... 

build.dependsOn(shadowJar); 

如何修改此文件,以便只生成阴影jar而不是常规jar?

+0

最好使用'assemble.dependsOn(shadowJar);'这样你的测试也可以使用shadowJar。请参阅构建管道图片:https://docs.gradle.org/current/userguide/java_plugin.html – Zasz

回答

8

你可以通过添加以下行到你的gradle这个脚本禁用jar任务:

// Disable the 'jar' task 
jar.enabled = false 

所以,在执行gradle这个脚本时,它会显示

:罐子时跳过

如果你想配置所有子项目,那么你可以添加以下内容到你的根build.gradle

subprojects { 

    // Disable the 'jar' task 
    tasks.jar.enabled = false 

} 
+0

嗯,它只适用于那个特定的项目,但嗯,事实上我不需要任何项目的罐子... – fge

+0

@fge还有一个选项可以完全删除任务,但是您必须确保所有依赖于jar任务的任务必须被映射(更容易禁用它) – MJSG

+0

好吧,我会尽快尝试花时间做这件事,但这种做法看起来非常有前途!已经upvoted,我会告诉你... – fge

相关问题