- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个单一的build.gradle
构建一个应用程序。它由几个任务组成(缩小、合并文件、gzip、上传到 CDN、调用外部脚本等)
我设法将所有内容移至 build.gradle
到 buildsrc/
中的自定义插件,遵循文档中 GreetingPlugin 的官方 Gradle 教程。经过一番努力,我现在可以从build.gradle
成功调用它了。 amd 它按预期工作:
group 'CDN'
version '1.0-SNAPSHOT'
buildscript {
.
.
}
println "building user app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'user'
.
.
println "building user app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'user'
println "building admin app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'admin'
task buildUser {
println "building user app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'user'
}
task buildAdmin {
println "building admin app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'admin'
}
task buildUser {
doLast {
println "building user app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'user'
}
}
task buildAdmin {
doLast {
println "building admin app"
apply plugin: BuildAppModule
appmodulebuilder.modulename = 'admin'
}
}
apply plugin: BuildAppModule
task buildUser (Type: BuildAppModule) {
doLast {
println "building user app"
appmodulebuilder.modulename = 'user'
}
}
task buildAdmin (Type: BuildAppModule) {
doLast {
println "building admin app"
appmodulebuilder.modulename = 'admin'
}
}
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.ProjectDependency;
import org.gradle.api.tasks.Exec;
class BuildAppModuleExtension {
String modulename
}
class BuildAppModule implements Plugin<Project> {
void apply(Project project) {
def extension = project.extensions.create('appmodulebuilder', BuildAppModuleExtension)
project.afterEvaluate {
println "-----------------------------"
println extension.modulename
println "-----------------------------"
}
def APP = extension.modulename
def buildDir = project.getBuildDir()
project.configure(project) {
apply plugin: 'js'
javascript.source {
/** common libraries */
lib {
js {
srcDir 'src/lib'
include "*.js"
}
}
/** specific app files */
appfiles {
js {
srcDir "src/app/${APP}"
include "*.js"
}
}
closurein {
js {
srcDir 'src/lib/closure'
include "in.jst"
}
}
closureout {
js {
srcDir 'src/lib/closure'
include "out.jst"
}
}
}
// Configure the built-in task
combineJs {
source = [ javascript.source.closurein.js.files, javascript.source.lib.js.files, javascript.source.appfiles.js.files, javascript.source.closureout.js.files ]
dest = file("${buildDir}/${APP}/js/code.debug.js")
}
minifyJs {
source = combineJs
dest = file("${buildDir}/${APP}/js/code.min.js")
sourceMap = file("${buildDir}/${APP}/js/code.sourcemap.json")
closure {
warningLevel = 'QUIET'
}
dependsOn 'undebug'
}
gzipJs {
source=file("${buildDir}/${APP}/js/code.min.js")
dest = file("${buildDir}/out/app/lib-${APP}/code.js")
}
apply plugin: 'css'
css.source {
lib {
css {
srcDir 'src/res'
include "*.css"
}
}
appfiles {
css {
srcDir "src/app/${APP}/res"
include "*.css"
}
}
}
// Specify a collection of files to be combined, then minified and finally GZip compressed.
combineCss {
source = [css.source.lib.css.files, css.source.appfiles.css.files]
dest = "${buildDir}/${APP}/res/style.all.css"
}
minifyCss {
source = combineCss
dest = "${buildDir}/${APP}/res/style.min.css"
yuicompressor { // Optional
lineBreakPos = -1
}
}
gzipCss {
dependsOn 'minifyCss'
source = minifyCss
dest = "${buildDir}/out/app/lib-${APP}/style.css"
}
}
project.task('gzipHtml') {
doLast {
def uploadOut = new ByteArrayOutputStream()
getProject().exec {
println "$buildDir"
commandLine "scripts/dohtml.sh","src/app","$buildDir/out/app", "$APP"
standardOutput = uploadOut
}
println uploadOut
}
}
/** upload module to the CDN, the final step */
project.task('upload') {
dependsOn 'gzipJs'
dependsOn 'gzipHtml'
doLast {
println "UPLOAD $APP"
def uploadOut = new ByteArrayOutputStream()
getProject().exec {
println "$buildDir"
commandLine "scripts/upload.sh","$buildDir/out/app/","s3://xxxxxxx/public/app/"
standardOutput = uploadOut
}
println uploadOut
}
/** remove window.console.log from the combined JS file */
project.task('undebug') {
dependsOn 'combineJs'
doLast {
def uploadOut = new ByteArrayOutputStream()
getProject().exec {
println "UNDEBUG $APP"
commandLine "scripts/undebug.sh","${buildDir}/${APP}/js/code.debug.js"
standardOutput = uploadOut
}
println uploadOut
}
}
}
}
}
最佳答案
一个插件只能应用于一个项目一次。任何第二次或以后应用相同插件的尝试都将无效。
我觉得你的插件应该添加一个 extension object可以在应用插件后配置。
例如:
apply plugin: BuildAppModule
appModuleBuilder {
moduleNames = ['user', 'admin']
}
apply plugin: BuildAppModule
appModuleBuilder {
module {
name = 'user'
type = 'xxx'
}
module {
name = 'admin'
type = 'yyy'
}
}
关于gradle - 在 buildsrc/中多次调用我的插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541058/
我的目标是拥有一个其他构建文件可以在 gradle 中看到的通用类。我创建了一个名为 buildSrc 的文件夹,它位于我的 android 项目的根目录中。内容如下所示: class Cou
我们有一个 Gradle 构建,其中包括 buildSrc带有一些自定义插件。这些插件还适用于其他插件。例如,我们的插件适用于 com.android.tools.build:gradle .对于注释
我有一个单一的build.gradle构建一个应用程序。它由几个任务组成(缩小、合并文件、gzip、上传到 CDN、调用外部脚本等) 我设法将所有内容移至 build.gradle到 buildsrc
我需要读取位于 buildSrc 特殊模块的 resources 文件夹内的属性文件来创建其他项目模块可以访问的 kotlin 对象。我试着把这个属性文件放在一起 在根项目文件夹中(这种情况有时有效有
将我的 gradle gradle-5.4.1 升级到 gradle-6.3 后,我收到了类似 的错误'buildSrc' 不能用作项目名称,因为它是保留名称。 我正在使用 buidleSrc 进行
我正在尝试切换到使用 Kotlin DSL 从对象 Kotlin 文件而不是 gradle 文件获取依赖项版本。当我执行 gradle sync 时,它无法解析引用,但我可以从 build.gradl
我有一个具有 buildSrc 目录的 Gradle 项目。主项目和 buildSrc 项目都需要知道 Artifactory 服务器的 URL。我希望将 URL 保存在一个地方,并且希望将其保存在源
在 gradle 中,使用 buildSrc 的目的是什么?文件作为顶级文件,而不是典型的 java 项目布局(src/main/java)? 如果我有一个布局 src main j
我有一个非常典型的 Gradle 库项目,其中包含一组依赖于一些常见配置的模块(Android 或纯 Java)。 这个通用配置被抽象为一个“publishConfig.gradle”文件(在需要它的
我正在尝试创建一个 Flavor 配置以避免每个模块和库 gradle 文件中的样板代码。 为此,我正在尝试转换 Piotr Zawadzki 解决方案 ( https://medium.com/st
假设我有一些类包含我想在 Gradle 构建期间和 Java 应用程序本身中使用的逻辑。如何配置 Gradle 构建以在构建和正在构建的项目之间共享相同的类,例如使用 Kotlin DSL? 最佳答案
我正在为我的公司编写一个自定义 Gradle 插件,以协助对我们的产品进行集成测试。我的团队希望在主要产品构建中构建和使用该插件(就像“buildSrc”插件一样),但还需要将该插件作为工件发布,以供
我有一个工作 build.gradle我想重构到 buildSrc 目录中,但找不到依赖项。 工作 build.gradle: import groovyx.net.http.HTTPBuilder
我在 buildSrc 构建中有一些相当长的测试,有时我想在开发过程中跳过这些测试,以查看模板更改的效果。它是一个报告生成器,有时我只想调整模板而不必更新所有测试;然后当我对输出感到满意时我会更新它们
我有一个需要自动生成类的 Android 库项目。此类是在构建期间使用放置在 Library 项目的 buildSrc 目录中的 Groovy 脚本生成的。这本身就可以正常工作。 然后我有一个使用该库
我在 Android Studio 中创建了一个新项目并将 gradle buildscript 转换为使用 kotlin dsl,如下所示: build.gradle.kts(项目) buildsc
我正在使用 buildSrc多模块 Kotlin 项目中的模块到 manage dependency definitions and versions .该模块使用kotlin-dsl如build.g
我有 多项目建在 buildSrc 目录 buildSrc ---build --- subProject1 ----build (2)
我有一个 gradle 项目,正在创建一个自定义插件来做一些额外的构建工作。插件的源文件存储在 buildSrc/ 中。 .我有基本的框架工作,我可以通过运行 gradle tasks 查看插件任务。
我关注 this tutorial关于如何在我的 Android 应用程序中使用 Kotlin 管理 Gradle 依赖项,现在我想在我的应用程序模块中使用我的 Versions 对象中定义的版本(场
我是一名优秀的程序员,十分优秀!