帮酷LOGO
  • 显示原文与译文双语对照的内容
文章标签:JAVA  plugin  buildconfig  Projects  Gradle  构建  proj  
A BuildConfig plugin for Gradle java projects

  • 源代码名称:gradle-buildconfig-plugin
  • 源代码网址:http://www.github.com/mfuerstenau/gradle-buildconfig-plugin
  • gradle-buildconfig-plugin源代码文档
  • gradle-buildconfig-plugin源代码下载
  • Git URL:
    git://www.github.com/mfuerstenau/gradle-buildconfig-plugin.git
  • Git Clone代码到本地:
    git clone http://www.github.com/mfuerstenau/gradle-buildconfig-plugin
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mfuerstenau/gradle-buildconfig-plugin
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • LicenseBuild StatusDownload

    Java和Groovy项目的 BuildConfig gradle插件

    包含一个类,该类在运行时由构建脚本进程访问时可以访问常量。 常数可以使用闭包定义

    依赖项

    有许多方法可以包含依赖项。

    简单( Gradle 2.1 + )

    plugins {
     id 'de.fuerstenau.buildconfig' version '1.1.8'}

    经典( Gradle之前的)

    尽管有点控制。

    buildscript {
     repositories {
     maven {
     url 'https://plugins.gradle.org/m2/' }
     }
     dependencies {
     classpath 'gradle.plugin.de.fuerstenau:BuildConfigPlugin:1.1.8' }
    }
    apply plugin: 'de.fuerstenau.buildconfig'// actually applies the plugin

    本地

    你可以从顶部的按钮下载 .jar -file,并作为文件依赖项使用

    buildscript {
     dependencies {
     classpath files ("${projectDir}/lib/BuildConfig-1.1.8-SNAPSHOT.jar") // insert the path to. jar-file }
    }
    apply plugin: 'de.fuerstenau.buildconfig'

    默认情况下,包中的BuildConfigBuildConfig 等于已经定义的group 或者 de.fuerstenau.buildconfig,如果没有定义 group,则为。 另外,BuildConfig 默认是为SourceSet 生成的。

    ide

    对于不同的ide有不同的需求。

    在 Netbeans 8.1与gradle插件之间,没有进一步的需求。 在盒子里工作。

    IntelliJ IDEA

    使用 IntelliJ IDEA 2016进行测试。生成工作在框中。 生成的类仅在应用 gradle插件并编译后才会被解析。

    apply plugin: 'idea'
    Eclipse

    带有buildship插件的Eclipse ( 火星 ) 在项目刷新后解析生成的类。 另外,需要应用 Eclipse gradle插件插件。

    apply plugin: 'eclipse'

    BuildConfig

    一个 BuildConfig 类( 可以配置类 NAME ) 始终有两个始终提供的( 2 ) 非可选字段,但不总是包含有用的数据。

    • String NAME - 应用程序 NAME ( 默认: project.name )
    • String VERSION - 应用程序版本( 默认: project.version 或者如果以前未设置 "unspecified" )

    一个 BuildConfig 作为服务器端Java生成,然后编译到一个 .class -file中,并添加到一个 SourceSet classpath classpath classpath中,并添加到由这些输出生成的.jar -file的classpath 。

    下面是一个示例,说明生成的Java 类可能看起来像:

    packagede.fuerstenau.buildconfig;/** DO NOT EDIT. GENERATED CODE */publicfinalclassBuildConfig{
     privateBuildConfig () { /*. no instance */ }
     publicstaticfinalStringVERSION="1.0-SNAPSHOT";
     publicstaticfinalStringNAME="HelloWorld";
    }

    应用程序内部的用法可能如下所示:

    packagesome.package;importde.fuerstenau.buildconfig.BuildConfig;publicclassHelloBuildConfig{
     publicstaticvoidmain (String[] args)
     {
     System.out.println (BuildConfig.NAME);
     System.out.println (BuildConfig.VERSION);
     }
    }

    由于编译类将被添加到类路径中,所以生成的 Java代码通常不会出现,因为类将被添加到类路径中,如果类可见,请参见IDE节。

    配置

    基本配置

    插件可以使用提供的buildConfig { } 配置闭包进行配置。 下面的闭包显示了基本属性及其默认值:

    buildConfig {
     appName = project.name // sets value of NAME field version = project.version // sets value of VERSION field,// 'unspecified' if project.version is not set clsName ='BuildConfig'// sets the name of the BuildConfig class packageName = project.group // sets the package of the BuildConfig class,// 'de.fuerstenau.buildconfig' if project.group is not set charset ='UTF-8'// sets charset of the generated class,// 'UTF-8' if not set otherwise}

    附加字段

    BuildConfig 类中可以轻松地通过 buildConfigField (String type, String name, String value) -method这里方法可以重复多次。

    • type 是字段的,它可以是任何 Java对象类型或者 Java ( 例如) 。 'int' 或者 'org.sampel.SomeType',请注意: 参数是 String ),
    • 因为字段将是一个 uppercasename,所以字段的NAME ( 字段) 表示应该是一个( 比如。 'MY_FIELD',也是一个 String
    • 最后一个但并非最小的value - 字段的值必须是该类型的有效值( 例如。 '13' 或者 ' { (byte) 0xfe, (byte) 0x11 }' 注意:作为 String ) 。

    注意:,而不是显式的值。 buildConfigField (String, String, Closure<String>) 鏂规碜。

    注意:如果你需要一个不是Java标准类型的类型,那么你需要提供一个完全限定类 NAME,并且该类型也必须在应用程序中提供。 这里外,不执行语法检查,因这里输入任何无效或者危险的值可以能会导致( 。如果值来自不安全的来源,请记住要退出) 。

    例如:

    buildConfig {
     buildConfigField 'String', 'MY_STR_FIELD', '"my message to the app"' buildConfigField 'String', 'MY_STR_FIELD2', {
     'some lazy evaluated value' 
     }
     buildConfigField 'int', 'MY_INT_FIELD', '42' buildConfigField 'byte[]', 'MY_BYTE_ARRAY_FIELD', '{ (byte) 0xfa, (byte) 0x20, (byte) 0x22 }' buildConfigField 'long', 'BUILD_UNIXTIME', System.currentTimeMillis() +'L' buildConfigField 'java.util.Date', 'BUILD_DATE', 'new java.util.Date('+System.currentTimeMillis() +'L)' buildConfigField 'java.time.Instant', 'BUILD_INSTANT', 'java.time.Instant.ofEpochMilli('+System.currentTimeMillis() +'L)'}

    注意:有一些黑色魔术使 Stringchar 常量更清晰,而不是

    buildConfigField 'String', 'MY_STR_FIELD', '"my message to the app"'buildConfigField 'char', 'MY_CHAR_FIELD', "'x'"// or ''x'' for that matter

    一个是alsow写

    buildConfigField 'String', 'MY_STR_FIELD', 'my message to the app'buildConfigField 'char', 'MY_CHAR_FIELD', 'x'

    Per-SourceSet-Configuration

    可以配置每个 SourceSet 。 在没有per-SourceSet-configuration的情况下,将为默认的/SourceSet 生成 BuildConfig,。 配置闭包提供了一种方法 sourceSets (Closure sourceSetsClosure) 可以用来完成这个任务。 参数 sourceSetsClosure 包含了实例的名称,后面跟有配置闭包,它具有与 BuildConfig 配置闭包相同的属性和方法,因为我们不希望无限递归,因此不需要使用 sourceSets -method 。

    buildConfig {
     sourceSets {
     main {
     // configuration of 'main' SourceSet }
     someOther {
     // configuration of 'someOther' SourceSet }
     }
    }

    但有一些特殊的行为:

    • 如果在特定的SourceSet 配置闭包中定义了 BuildConfig 闭包的属性,则继承和重写这些属性。
    • 如果使用 sourceSets 方法,插件将只为 'main' - SourceSet 生成一个 BuildConfig,仅当它在。

    以下配置省略 'main' - SourceSetBuildConfig,因为它不在 sourceSets -closure中,appName 是继承但为 someOther 重写的:

    buildConfig {
     appName ='MyAppName' sourceSets {
     someOther {
     appName ='MyOtherAppName'// configuration of 'someOther' SourceSet }
     yetSomeOther {
     // configuration of 'yetSomeOther' SourceSet }
     }
    }

    高级用法

    手动任务连接

    这是手动创建任务并连接它们以生成和编译 main - SourceSet的生成配置的示例。 这与插件的内部工作非常相似。

    首先,我们不希望插件被应用,只需要解析。 这可以像这样完成

    Gradle 3.0之前
    buildscript {
     repositories {
     maven {
     url 'https://plugins.gradle.org/m2/' }
     }
     dependencies {
     classpath 'gradle.plugin.de.fuerstenau:BuildConfigPlugin:1.1.8' }
    }plugins {
     id 'java'}

    注意:我们不应用插件,只需要解析类路径。

    Gradle 3.0 +

    因为 Gradle 3.0有一个新选项来解析插件并使它的在类路径上可用,但不能应用它。 这样你就可以从上面省略整个 buildscript -closure,而只使用 plugins -closure 。

    plugins {
     id 'java' id 'de.fuerstenau.buildconfig' version '1.1.8' apply false}

    注意:在插件声明的末尾应用 false 。

    然后我们创建任务和线

    /* the generating task, creates the. java-file */task generateBuildConfig (type: de.fuerstenau.buildconfig.GenerateBuildConfigTask) {
     /* we need to define an output dir for the generated. java-file */ outputDir =newFile ("${buildDir}/gen/buildconfig/src/main/")
     /* the task has nearly the same properties as the buildconfig closure */ appName ='SuperTrooperStarshipApp' clsName ='MainConfig' packageName ='org.sample' buildConfigField 'int', 'MY_INT_FIELD', '42'}/* the compiling task, compiles the generated. java file */task compileBuildConfig(type:JavaCompile, dependsOn: generateBuildConfig) {
     classpath = files () // we need no extra class path/* where do we want our. class file */ destinationDir =newFile ("${buildDir}/gen/buildconfig/classes/main/")
     /* the input is the output of the generating task */ source = generateBuildConfig.outputDir
    }sourceSets {
     main {
     /* last but not least we want our buildconfig to be part of the classpath */ compileClasspath += compileBuildConfig.outputs.files
     /* also we want the. class-file to be included in the default. jar-artifact, * therefore we add our outputs to the sourceset's outputs, we nee to filter out * the dependency-cache */ compileBuildConfig.outputs.files.findAll {
     !it.name.endsWith ('dependency-cache') // we don't want these }.each {
     output.dir it // add everything else }
     }
    }

    可选的Maven 存储库

    如果在 plugins.gradle.org 处存储库存在问题,可以将它的用作替代选项:

    buildscript {
     repositories {
     maven {
     url 'https://dl.bintray.com/mfuerstenau/maven' }
     }
     dependencies {
     classpath 'gradle.plugin.de.fuerstenau:BuildConfigPlugin:1.1.8' }
    }
    apply plugin: 'de.fuerstenau.buildconfig'// actually applies the plugin

    兼容性

    • Oracle JDK和 OpenJDK 1.7兼容,
    • 带有Java和/或者Groovy插件的Gradle 2.9 -3.3 。

    Gradle插件门户

    这个插件是在 https://plugins.gradle.org/plugin/de.fuerstenau.buildconfig 列出的。



    文章标签:JAVA  plugin  proj  构建  Projects  Gradle  buildconfig  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语