当前位置: 首页 > news >正文

网站建设的步骤过程文库小程序开发教程百度云

网站建设的步骤过程文库,小程序开发教程百度云,郑州政策最新消息,电子商务网站的主题及建设目标gradle文件不识别通过约定进行配置具有许多优点#xff0c;尤其是在简洁方面#xff0c;因为开发人员不需要显式配置通过约定隐式配置的内容。 但是#xff0c;在利用约定进行配置时#xff0c;需要注意这些约定。 这些约定可能已记录在案#xff0c;但是当我可以编程方式… gradle文件不识别 通过约定进行配置具有许多优点尤其是在简洁方面因为开发人员不需要显式配置通过约定隐式配置的内容。 但是在利用约定进行配置时需要注意这些约定。 这些约定可能已记录在案但是当我可以编程方式确定约定时我总是喜欢它因为文档可能会过时代码背后的相同原理始终是正确的而注释有时是正确的。 我通过查看如何识别与Gradle Java Plugin关联的特定约定开始本文。 然后我对该方法进行一般化以识别与与Gradle构建的根项目相关联的所有任务相关联的所有属性。 Gradle插件上的Gradle文档说明了有关Gradle插件的重要性及其对Gradle构建的补充的以下内容 Gradle的核心故意为现实世界的自动化提供了很少的有用功能。 插件添加了所有有用的功能例如编译Java代码的功能。 插件添加新任务例如JavaCompile域对象例如SourceSet约定例如主Java源位于src / main / java以及扩展核心对象和其他插件的对象。 这篇文章介绍了Java插件为Gradle构建带来的一些任务域对象和约定。 首先我需要一个非常简单的Gradle构建文件。 它仅包含应用Java插件的一行。 接下来显示在Gradle构建文件build-java-plugin.gradle 。 build-java-plugin.gradle apply plugin: java 有了该单行的Gradle构建文件可以通过运行gradle -b build-java-plugin.gradle tasks命令轻松查看插件提供了哪些Gradle gradle -b build-java-plugin.gradle tasks 。 接下来的两个屏幕快照显示了运行空的Gradle构建文件的输出以及仅使用Java插件的应用程序运行Gradle构建文件的输出。 通过将运行Gradle“任务”的输出与空构建文件的输出与运行Gradle“任务”的构建文件与应用Java插件的输出进行比较我们可以看到Gradle具有相同的“构建设置任务”集和“帮助任务”无论是否应用了插件。 更重要的是我们看到Java插件添加了许多新任务这些任务分类为“构建任务”汇编构建buildDependentsbuildNeeded类cleanjartestClasses“文档任务”javadoc“验证任务”检查测试和“规则”。 我在Gradle 1.10中享受的一项功能是Gradle 1.8 我使用的较早版本没有的功能是可以在命令行中查询特定Gradle任务的详细信息 。 在Java插件任务compileJava jar和javadoc的下一个屏幕快照中对此进行了演示。 通过使用命令行上的help --task task_name命令所有这三个任务都有写入标准输出的详细信息。 有关Java插件任务的这些详细信息也可以在Gradle用户指南中找到 。 由于Gradle基于Groovy构建因此使用“蛮力”确定Java插件的特性相当容易。 下一个代码清单针对build-java-plugin-properties.gradle 演示了如何使用Groovy确定Gradle属性可以用-P指定的那些属性而不是用-D指定的系统属性 该属性可在构建脚本之前和之后使用。在应用Java插件后然后使用Groovy的高度方便的重写减法运算符来查找差异。 Java插件添加到Gradle脚本的所有属性的名称和值属性“ properties”除外按字母顺序显示。 // build-java-plugin-properties.gradle // // Displays properties that Gradle Java Plugin adds beyond properties already // specified for any Gradle build.def propertiesBefore this.propertiesapply plugin: javadef propertiesAfter this.propertiesdef extraProperties propertiesAfter - propertiesBeforedef extraPropertiesKeys new TreeSetString() extraProperties.each { property -if (property.key ! properties){extraPropertiesKeys.add(property.key)} }extraPropertiesKeys.each { key -println ${key} : ${extraProperties.get(key)} } 下图显示了屏幕快照其中包含运行此脚本的输出。 屏幕快照没有显示完整的输出但是在图像后的文本中显示了较大的输出所有属性。 从Gradle脚本上方运行以查看Java插件属性的输出 apiDocTitle : gradleExample API archivesBaseName : gradleExample assemble : task :assemble binaries : [classes main, classes test] build : task :build buildDependents : task :buildDependents buildNeeded : task :buildNeeded buildTasks : [build] check : task :check classes : task :classes clean : task :clean compileJava : task :compileJava compileTestJava : task :compileTestJava defaultArtifacts : org.gradle.api.internal.plugins.DefaultArtifactPublicationSet_Decoratedbc80d8 dependencyCacheDir : C:\java\examples\groovyExamples\gradleExample\build\dependency-cache dependencyCacheDirName : dependency-cache distsDir : C:\java\examples\groovyExamples\gradleExample\build\distributions distsDirName : distributions docsDir : C:\java\examples\groovyExamples\gradleExample\build\docs docsDirName : docs inheritedScope : org.gradle.api.internal.ExtensibleDynamicObject$InheritedDynamicObjectc10304 jar : task :jar javadoc : task :javadoc libsDir : C:\java\examples\groovyExamples\gradleExample\build\libs libsDirName : libs manifest : org.gradle.api.java.archives.internal.DefaultManifest1ad3677 metaInf : [] module : org.gradle.api.internal.artifacts.ProjectBackedModuled2eead processResources : task :processResources processTestResources : task :processTestResources rebuildTasks : [clean, build] reporting : org.gradle.api.reporting.ReportingExtension_Decorated33ab8f reportsDir : C:\java\examples\groovyExamples\gradleExample\build\reports reportsDirName : reports runtimeClasspath : file collection sourceCompatibility : 1.7 sourceSets : sources : [, ] status : integration targetCompatibility : 1.7 test : task :test testClasses : task :testClasses testReportDir : C:\java\examples\groovyExamples\gradleExample\build\reports\tests testReportDirName : tests testResultsDir : C:\java\examples\groovyExamples\gradleExample\build\test-results testResultsDirName : test-results Gradle使用命令gradle properties可以轻松查看所有Gradle属性但是此命令行操作将显示所有属性无论其来源Gradle本身还是插件。 Java插件添加到构建中的每个Gradle任务都有其自己的属性集。 这些属性可以在Gradle Build Language Reference中识别。 该文档的“ 任务类型”部分具有指向每种任务类型的链接。 每个任务类型的链接到页面都有该任务类型支持的属性的详细信息。 例如任务类型JavaCompile在其页面上列出为具有诸如classpath destinationDir和source之 类的属性。 以下相当广泛的脚本显示了compileJavajar和javadoc Gradle Java Plugin任务的属性设置。 该脚本演示了将Groovy应用于识别Gradle构建设置的强大功能。 如果使用更多的反射该脚本可能会更短但是显式地调用任务的属性在可读性和作为每个任务可用属性的参考方面确实具有优势。 build-java-plugin-metadata.gradle // build-java-plugin-metadata.gradle // // Displays the properties associated with the Gradle Java Plugin tasks // of compileJava, jar, and javadoc.import groovy.transform.Fieldapply plugin: javaField int MAX_COLUMNS 80 Field String headerSeparator .multiply(MAX_COLUMNS)printCompileJavaProperties() printJarProperties() printJavadocProperties()def printCompileJavaProperties() {printHeader(compileJava Task)println compileJava.classpath:\n${extractStringRepresentation(compileJava.classpath)}println compileJava.destinationDir:\n${extractStringRepresentation(compileJava.destinationDir)}println compileJava.source:\n${extractStringRepresentation(compileJava.source)}println compileJava.options:\n${extractStringRepresentation(compileJava.options)}println compileJava.includes:\n${extractStringRepresentation(compileJava.includes)}println compileJava.excludes:\n${extractStringRepresentation(compileJava.excludes)}println compileJava.sourceCompatibility:\n${extractStringRepresentation(compileJava.sourceCompatibility)}println compileJava.targetCompatibility:\n${extractStringRepresentation(compileJava.targetCompatibility)} }def printJarProperties() {printHeader(jar Task)println jar.appendix:\n${extractStringRepresentation(jar.appendix)}println jar.archiveName:\n${extractStringRepresentation(jar.archiveName)}println jar.archivePath:\n${extractStringRepresentation(jar.archivePath)}println jar.baseName:\n${extractStringRepresentation(jar.baseName)}println jar.caseSensitive:\n${extractStringRepresentation(jar.caseSensitive)}println jar.classifier:\n${extractStringRepresentation(jar.classifier)}println jar.destinationDir:\n${extractStringRepresentation(jar.destinationDir)}println jar.dirMode:\n${extractStringRepresentation(jar.dirMode)}println jar.duplicatesStrategy:\n${extractStringRepresentation(jar.duplicatesStrategy)}println jar.entryCompression:\n${extractStringRepresentation(jar.entryCompression)}println jar.excludes:\n${extractStringRepresentation(jar.excludes)}println jar.extension:\n${extractStringRepresentation(jar.extension)}println jar.fileMode:\n${extractStringRepresentation(jar.fileMode)}println jar.includeEmptyDirs:\n${extractStringRepresentation(jar.includeEmptyDirs)}println jar.includes:\n${extractStringRepresentation(jar.includes)}println jar.manifest:\n${extractStringRepresentation(jar.manifest)}println jar.source:\n${extractStringRepresentation(jar.source)}println jar.version:\n${extractStringRepresentation(jar.version)} }def printJavadocProperties() {printHeader(javadoc Task)println javadoc.classpath:\n${extractStringRepresentation(javadoc.classpath)}println javadoc.destinationDir:\n${extractStringRepresentation(javadoc.destinationDir)}println javadoc.excludes:\n${extractStringRepresentation(javadoc.excludes)}println javadoc.executable:\n${extractStringRepresentation(javadoc.executable)}println javadoc.failOnError:\n${extractStringRepresentation(javadoc.failOnError)}println javadoc.includes:\n${extractStringRepresentation(javadoc.includes)}println javadoc.maxMemory:\n${extractStringRepresentation(javadoc.maxMemory)}println javadoc.options:\n${extractStringRepresentation(javadoc.options)}println javadoc.source:\n${extractStringRepresentation(javadoc.source)}println javadoc.title:\n${extractStringRepresentation(javadoc.title)} }def String extractStringRepresentation(Object object) {String returnStringif (object in String){returnString \t${object}\n}else if (object in File){returnString \t${object.canonicalPath}\n}else if (object in FileCollection) // FileTree is a FileCollection{StringBuilder filesStr new StringBuilder()def files object.filesfiles.each{ file -filesStr \t file.canonicalPath \n }returnString filesStr.toString()}else if (object in CompileOptions){StringBuilder compileOptionsStr new StringBuilder()def compileProperties object.propertiescompileProperties.each{ compileProperty -if (compileProperty.value in DebugOptions){compileOptionsStr \t compileProperty.key : extractStringRepresentation(compileProperty.value) \n}else if (compileProperty.value in DependOptions){compileOptionsStr \t compileProperty.key : extractStringRepresentation(compileProperty.value) \n}else if (compileProperty.value in ForkOptions){compileOptionsStr \t compileProperty.key : extractStringRepresentation(compileProperty.value) \n}else if (compileProperty.key ! class){compileOptionsStr \t compileProperty.key : compileProperty.value \n} }returnString compileOptionsStr.toString()}else if (object in DebugOptions){returnString \t${object.debugLevel}}else if (object in DependOptions){returnString \t${object.classpath}}else if (object in ForkOptions){returnString \t${object.executable} executable with ${object.tempDir} temp directory }else if (object in Set || object in Boolean || object in Number || object in Enum){returnString \t${object.toString()}\n}else if (object in Manifest){StringBuilder manifestStr new StringBuilder()def manifestAttributes object.getAttributes()manifestAttributes.each{ manifestAttribute -manifestStr \t manifestAttribute.key : manifestAttribute.value \n }returnString manifestStr.toString()}else if (object in MinimalJavadocOptions){returnString extractJavadocOptionsAsString(object)}else if (object null){returnString \tnull\n}else{returnString \t${object?.class} was unexpected type.\n}return returnString }def String extractJavadocOptionsAsString(MinimalJavadocOptions javadocOptions) {StringBuilder javadocOptionsStr new StringBuilder()javadocOptionsStr \tjavadoc.bootClasspath:def bootClasspathFiles javadocOptions.bootClasspathbootClasspathFiles.each{ bootClasspathFile -javadocOptionsStr \t\t bootClasspathFile.canonicalName \n }javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.classpath:def classpathFiles javadocOptions.classpathclasspathFiles.each{ classpathFile -javadocOptionsStr \t\t classpathFile.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.destinationDirectory: javadocOptions.destinationDirectory?.canonicalName \njavadocOptionsStr \tjavadocOptions.doclet: javadocOptions.doclet \njavadocOptionsStr \tjavadocOptions.docletpath:def docletpath javadocOptions.docletpathdocletpath.each{ docletEntry -javadocOptionsStr \t\t docletEntry.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.encoding: javadocOptions.encoding \njavadocOptionsStr \tjavadocOptions.extDirs:def extDirs javadocOptions.extDirsextDirs.each{ extDir -javadocOptionsStr \t\t extDir.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.header: javadocOptions.header \njavadocOptionsStr \tjavadocOptions.JFlags:def jflags javadocOptions.JFlagsjflags.each{ jflag -javadocOptionsStr \t\t jflag \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.locale: javadocOptions.locale \njavadocOptionsStr \tjavadocOptions.memberLevel: javadocOptions.memberLevel \njavadocOptionsStr \tjavadocOptions.optionFiles:def optionFiles javadocOptions.optionFilesoptionFiles.each{ optionFile -javadocOptionsStr \t\t optionFile.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.outputLevel: javadocOptions.outputLevel \njavadocOptionsStr \tjavadocOptions.overview: javadocOptions.overview \njavadocOptionsStr \tjavadocOptions.source: javadocOptions.source \njavadocOptionsStr \tjavadocOptions.sourceNames:def sourceNames javadocOptions.sourceNamessourceNames.each{ sourceName -javadocOptionsStr \t\t sourceName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.windowTitle: javadocOptions.windowTitle \nreturn javadocOptionsStr.toString() }def printHeader(String headerText) {println headerSeparatorprintln ${headerText.center(MAX_COLUMNS-4)} println headerSeparator } 我在此构建文件中使用了Groovy Field批注 以使应用于该变量的变量可用于构建文件中的方法。 Field批注直到Groovy 1.8才可用这使我想起了有关Gradle和Groovy的其他重要信息Gradle使用其自己的预包装Groovy而不是可能在自己的计算机上安装的任何其他版本的Groovy。 您可以使用gradle --version命令确定哪个版本的Groovy。 下一个屏幕快照展示了我的Groovy版本 2.1.6 与我的Gradle安装版本1.10使用的Groovy版本1.8.6不同。 因为Gradle 1.10随Groovy 1.8.6一起提供 所以我可以使用Field注释 。 由于最后一个脚本的输出太长了因此我在这里将其显示为文本而不是图像。 在build-java-plugin-metadata.gradle上运行Running Gradle的输出 compileJava Task compileJava.classpath:compileJava.destinationDir:C:\java\examples\groovyExamples\gradleExample\build\classes\maincompileJava.source:C:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main2.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main3.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main4.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Temperature.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureScale.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureUnit.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureUnit2.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureUnit3.javacompileJava.options:bootClasspath: nullfork: falseencoding: nulldeprecation: falsewarnings: trueforkOptions: null executable with null temp directoryfailOnError: trueuseDepend: falseincludeJavaRuntime: falseuseAnt: falsecompilerArgs: []debug: trueextensionDirs: nullcompiler: nulldebugOptions: nullverbose: falseoptimize: falsedependOptions: listFiles: falsecompileJava.includes:[]compileJava.excludes:[]compileJava.sourceCompatibility:1.7compileJava.targetCompatibility:1.7jar Task jar.appendix:nulljar.archiveName:gradleExample.jarjar.archivePath:C:\java\examples\groovyExamples\gradleExample\build\libs\gradleExample.jarjar.baseName:gradleExamplejar.caseSensitive:truejar.classifier:jar.destinationDir:C:\java\examples\groovyExamples\gradleExample\build\libsjar.dirMode:nulljar.duplicatesStrategy:INCLUDEjar.entryCompression:DEFLATEDjar.excludes:[]jar.extension:jarjar.fileMode:nulljar.includeEmptyDirs:truejar.includes:[]jar.manifest:Manifest-Version: 1.0jar.source:C:\java\examples\groovyExamples\gradleExample\build\tmp\jar\MANIFEST.MFjar.version:nulljavadoc Task javadoc.classpath:C:\java\examples\groovyExamples\gradleExample\build\classes\mainC:\java\examples\groovyExamples\gradleExample\build\resources\mainjavadoc.destinationDir:C:\java\examples\groovyExamples\gradleExample\build\docs\javadocjavadoc.excludes:[]javadoc.executable:nulljavadoc.failOnError:truejavadoc.includes:[]javadoc.maxMemory:nulljavadoc.options:javadoc.bootClasspath:javadocOptions.classpath:javadocOptions.destinationDirectory: nulljavadocOptions.doclet: nulljavadocOptions.docletpath:javadocOptions.encoding: nulljavadocOptions.extDirs:javadocOptions.header: nulljavadocOptions.JFlags:javadocOptions.locale: nulljavadocOptions.memberLevel: nulljavadocOptions.optionFiles:javadocOptions.outputLevel: QUIETjavadocOptions.overview: nulljavadocOptions.source: nulljavadocOptions.sourceNames:javadocOptions.windowTitle: nulljavadoc.source:C:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main2.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main3.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Main4.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\Temperature.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureScale.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureUnit.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureUnit2.javaC:\java\examples\groovyExamples\gradleExample\src\main\java\dustin\examples\TemperatureUnit3.javajavadoc.title:gradleExample API:helpWelcome to Gradle 1.10.To run a build, run gradle ...To see a list of available tasks, run gradle tasksTo see a list of command-line options, run gradle --helpBUILD SUCCESSFULTotal time: 14.041 secs 上面显示的示例可以很好地识别与Java Gradle插件关联的特定属性。 这可以很好地工作但是它的局限性包括需要为每个需要其值的属性编写显式代码。 这意味着没有必要知道所有可用属性的进一步限制我使用文档在上面的示例中显式打印了值。 进一步暗示的限制是上面的脚本将来将不会显示添加到这些任务的任何属性值。 下一个Gradle构建示例基于先前的示例但是此示例未明确声明要显示的任务和属性。 而是查找与根项目关联的所有任务然后打印与每个任务关联的所有属性。 构建java插件元数据反射.gradle // build-java-plugin-metadata-reflection.gradle // // Displays the properties associated with the tasks associated with the Gradle // root project. //import groovy.transform.Fieldapply plugin: javaField int MAX_COLUMNS 80 Field String headerSeparator .multiply(MAX_COLUMNS)def rootProject getRootProject() def tasks rootProject.tasks tasks.each { task -printTaskProperties(task) }def printTaskProperties(Task task) {printHeader(Task task.name)def taskProperties task.propertiestaskProperties.each{ taskProperty -println ${task.name}.${taskProperty.key}${extractStringRepresentation(taskProperty.value)}} }def String extractStringRepresentation(Object object) {String returnStringif (object in String){returnString \t${object}\n}else if (object in File){returnString \t${object.canonicalPath}\n}else if (object in FileCollection) // FileTree is a FileCollection{StringBuilder filesStr new StringBuilder()def files object.filesfiles.each{ file -filesStr \t file.canonicalPath \n }returnString filesStr.toString()}else if (object in CompileOptions){StringBuilder compileOptionsStr new StringBuilder()def compileProperties object.propertiescompileProperties.each{ compileProperty -if (compileProperty.value in DebugOptions){compileOptionsStr \t compileProperty.key : extractStringRepresentation(compileProperty.value) \n}else if (compileProperty.value in DependOptions){compileOptionsStr \t compileProperty.key : extractStringRepresentation(compileProperty.value) \n}else if (compileProperty.value in ForkOptions){compileOptionsStr \t compileProperty.key : extractStringRepresentation(compileProperty.value) \n}else if (compileProperty.key ! class){compileOptionsStr \t compileProperty.key : compileProperty.value \n} }returnString compileOptionsStr.toString()}else if (object in DebugOptions){returnString \t${object.debugLevel}}else if (object in DependOptions){returnString \t${object.classpath}}else if (object in ForkOptions){returnString \t${object.executable} executable with ${object.tempDir} temp directory }else if (object in Set || object in List || object in Boolean || object in Number || object in Enum || object in Class){returnString \t${object.toString()}\n}else if (object in Manifest){StringBuilder manifestStr new StringBuilder()def manifestAttributes object.getAttributes()manifestAttributes.each{ manifestAttribute -manifestStr \t manifestAttribute.key : manifestAttribute.value \n }returnString manifestStr.toString()}else if (object in MinimalJavadocOptions){returnString extractJavadocOptionsAsString(object)}else if (object in Convention){StringBuilder conventionStr new StringBuilder()object.plugins.each?.keyset{ plugin -conventionStr \t plugin \n}returnString conventionStr.toString()}else if (object in LoggingManager){returnString \n\tCurrent Log Level: ${object.level}\n\tStandard Error: ${object.standardErrorCaptureLevel}\n\tStandard Output: ${object.standardOutputCaptureLevel}\n}else if (object null){returnString \tnull\n}else{returnString \t${object?.class} was unexpected type with value of ${object}.\n}return returnString }def String extractJavadocOptionsAsString(MinimalJavadocOptions javadocOptions) {StringBuilder javadocOptionsStr new StringBuilder()javadocOptionsStr \tjavadoc.bootClasspath:def bootClasspathFiles javadocOptions.bootClasspathbootClasspathFiles.each{ bootClasspathFile -javadocOptionsStr \t\t bootClasspathFile.canonicalName \n }javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.classpath:def classpathFiles javadocOptions.classpathclasspathFiles.each{ classpathFile -javadocOptionsStr \t\t classpathFile.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.destinationDirectory: javadocOptions.destinationDirectory?.canonicalName \njavadocOptionsStr \tjavadocOptions.doclet: javadocOptions.doclet \njavadocOptionsStr \tjavadocOptions.docletpath:def docletpath javadocOptions.docletpathdocletpath.each{ docletEntry -javadocOptionsStr \t\t docletEntry.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.encoding: javadocOptions.encoding \njavadocOptionsStr \tjavadocOptions.extDirs:def extDirs javadocOptions.extDirsextDirs.each{ extDir -javadocOptionsStr \t\t extDir.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.header: javadocOptions.header \njavadocOptionsStr \tjavadocOptions.JFlags:def jflags javadocOptions.JFlagsjflags.each{ jflag -javadocOptionsStr \t\t jflag \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.locale: javadocOptions.locale \njavadocOptionsStr \tjavadocOptions.memberLevel: javadocOptions.memberLevel \njavadocOptionsStr \tjavadocOptions.optionFiles:def optionFiles javadocOptions.optionFilesoptionFiles.each{ optionFile -javadocOptionsStr \t\t optionFile.canonicalName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.outputLevel: javadocOptions.outputLevel \njavadocOptionsStr \tjavadocOptions.overview: javadocOptions.overview \njavadocOptionsStr \tjavadocOptions.source: javadocOptions.source \njavadocOptionsStr \tjavadocOptions.sourceNames:def sourceNames javadocOptions.sourceNamessourceNames.each{ sourceName -javadocOptionsStr \t\t sourceName \n}javadocOptionsStr \njavadocOptionsStr \tjavadocOptions.windowTitle: javadocOptions.windowTitle \nreturn javadocOptionsStr.toString() }def printHeader(String headerText) {println headerSeparatorprintln ${headerText.center(MAX_COLUMNS-4)} println headerSeparator } 因为此输出是针对与Gradle构建的根项目相关联的所有Tasks相关的所有属性所以输出太长而无法在此处包含。 并非所有的属性值实例都具有extractStringRepresentationObject object方法准备处理的类但是可以将这些情况添加到该方法的if-else if结构中以进行处理。 此版本的Gradle构建比早期版本更通用并打印出与Task关联的属性这些属性按Task分组。 由于Gradle构建与Groovy紧密耦合因此可以使用Groovy语法和功能来了解有关Gradle构建的更多信息。 本文中的示例利用了许多Groovy的优点。 上面的Gradle构建代码之所以如此冗长是因为大多数用于属性值的Gradle类都没有重写toString方法因此如果没有特殊的代码来调用特定的方法来获得有用的表示形式就不会显示出真正有用的输出 。 我没有在本文的示例中进行此操作但是要解决缺少缺少的toString()方法的另一种方法是使用Groovy的拦截功能 metaClass.invokeMethod 拦截对toString()调用并提供覆盖的版本。 那基本上是与上面使用的相同的代码但是将被封装在拦截对象中而不是包含在脚本代码中。 结论 Gradle有非常好的文档尤其是Gradle用户指南和Gradle构建语言参考 并且可以从该文档中轻松访问与Java Plugin for Gradle和其他插件相关的大多数任务和属性。 但是我想知道如何以编程方式识别重要的约定以防万一文档被弄错了或者我使用的版本与文档所支持的版本不同。 这篇文章的另一个目的是演示与Gradle合作时了解Groovy的有用性。 出于这个原因我相信Gradle日益重要的地位不免会增加对Groovy的兴趣。 参考从我们的JCG合作伙伴 Dustin Marx在“ 实际事件的启发”博客中确定Gradle约定 。 翻译自: https://www.javacodegeeks.com/2014/01/identifying-gradle-conventions.htmlgradle文件不识别
http://www.zqtcl.cn/news/684032/

相关文章:

  • 科技网站域名大型网站开发团队
  • 温岭建设规划局网站注册新公司网上怎么核名
  • dede网站移动端怎么做golang 网站开发 开源
  • 织梦网站导航固定沈阳男科医院在线咨询免费
  • 四川华鸿建设有限公司网站网站建设需求文案
  • 汕头东莞网站建设怎么制作微信小程序app
  • 网站建设预算方案模板怎么做网络推广网站
  • 顺义网站开发wordpress内容主题模板下载
  • 永康做网站的化工网站模板免费下载
  • 潍坊高密网站建设如何做网页推广
  • 杭州房产网站建设wordpress 替换谷歌字体
  • 陕西省建设工程质量安全监督总站网站开发公司与施工单位工程造价鉴定报告
  • 嘉兴网站建设企业阿里巴巴国际贸易网站
  • 临沂手机网站建设珠海手机网站建设价格
  • 56m做图片视频的网站是什么软件开发和大数据哪个前景好
  • 郑州网站建设哪家做快消品的网站
  • 太原做网站费用东莞it外包
  • 深圳网站关键词优化公司集团网站建
  • 网站建设项目合同传奇手游网站
  • 如何学习网站建设app申请付费网站
  • 微网站开发平台案例重庆网站设计哪家公司好
  • 快递空包网站建设网站的首页怎么做的
  • 青海手机网站建设北京网站建设推荐华网天下
  • 网站网站建设公司孩子学编程网上课程哪家好
  • 跨境电商网站建设方案书江门网页制作
  • 门户网站建设定做如何使用域名访问网站
  • 做网站后台运营这个工作怎么样建设网站销售
  • 两学一做网上答题网站做网站域名是赠送的吗
  • 江苏住房城乡建设厅网站WordPress上传Excel
  • 广州淘宝网站建设济南高新区网站建设