当前位置: 首页 > 面试题库 >

如何读取属性文件并在项目Gradle脚本中使用值?

鱼志学
2023-03-14
问题内容

我正在使用Gradle脚本工作,需要在其中读取local.properties文件并使用中的属性文件中的值build.gradle。我以下面的方式来做。我运行了以下脚本,它现在引发错误,但是它也没有执行创建,删除和复制文件的操作。我试图打印变量的值,它显示正确的值。

有人可以让我知道这是否是正确的方法吗?我认为另一种方法是在中定义所有内容并在中gradle.properties使用它build.gradle。有人可以让我知道如何build.gradle从中访问属性build.properties吗?

build.gradle 文件:

apply plugin: 'java'

//-- set the group for publishing
group = 'com.true.test'

/**
 * Initializing GAVC settings
 */
def buildProperties = new Properties()
file("version.properties").withInputStream {
        stream -> buildProperties.load(stream)
}
//if jenkins build, add the jenkins build version to the version. Else add snapshot version to the version.
def env = System.getenv()
if (env["BUILD_NUMBER"]) buildProperties.test+= ".${env["BUILD_NUMBER"]}"
version = buildProperties.test
println "${version}"

//name is set in the settings.gradle file
group = "com.true.test"
version = buildProperties.test
println "Building ${project.group}:${project.name}:${project.version}"

Properties properties = new Properties()
properties.load(project.file('build.properties').newDataInputStream())
def folderDir = properties.getProperty('build.dir')
def configDir = properties.getProperty('config.dir')
def baseDir  = properties.getProperty('base.dir')
def logDir  = properties.getProperty('log.dir')
def deployDir  = properties.getProperty('deploy.dir')
def testsDir  = properties.getProperty('tests.dir')
def packageDir  = properties.getProperty('package.dir')
def wrapperDir  = properties.getProperty('wrapper.dir')


sourceCompatibility = 1.7
compileJava.options.encoding = 'UTF-8'

repositories {
     maven { url "http://arti.oven.c:9000/release" }
  }

task swipe(type: Delete) {
         println "Delete $projectDir/${folderDir}"
         delete "$projectDir/$folderDir"
         delete "$projectDir/$logDir"
         delete "$projectDir/$deployDir"
         delete "$projectDir/$packageDir"
         delete "$projectDir/$testsDir"
         mkdir("$projectDir/${folderDir}")
         mkdir("projectDir/${logDir}")
         mkdir("projectDir/${deployDir}")
         mkdir("projectDir/${packageDir}")
         mkdir("projectDir/${testsDir}")
}
task prepConfigs(type: Copy, overwrite:true, dependsOn: swipe) {
    println "The name of ${projectDir}/${folderDir} and ${projectDir}/${configDir}"
    from('${projectDir}/${folderDir}')
    into('${projectDir}/$configDir}')
    include('*.xml')
}

build.properties 文件:

# -----------------------------------------------------------------
# General Settings
# -----------------------------------------------------------------
application.name  = Admin
project.name = Hello Cool

# -----------------------------------------------------------------
# ant build directories
# -----------------------------------------------------------------
sandbox.dir = ${projectDir}/../..
reno.root.dir=${sandbox.dir}/Reno
ant.dir = ${projectDir}/ant
build.dir = ${ant.dir}/build
log.dir  = ${ant.dir}/logs
config.dir = ${ant.dir}/configs
deploy.dir  = ${ant.dir}/deploy
static.dir =  ${ant.dir}/static
package.dir = ${ant.dir}/package
tests.dir = ${ant.dir}/tests
tests.logs.dir = ${tests.dir}/logs
external.dir = ${sandbox.dir}/FlexCommon/External
external.lib.dir = ${external.dir}/libs

问题答案:

如果使用默认gradle.properties文件,则可以直接从build.gradle文件内部访问属性:

gradle.properties

applicationName=Admin
projectName=Hello Cool

build.gradle

task printProps {
    doFirst {
        println applicationName
        println projectName
    }
}

如果您需要访问自定义文件或访问其中包含的属性.(看起来需要这样做),则可以在build.gradle文件中执行以下操作:

def props = new Properties()
file("build.properties").withInputStream { props.load(it) }

task printProps {
    doFirst {
        println props.getProperty("application.name")
        println props.getProperty("project.name")
    }
}

请参阅Gradle文档的此部分以获取更多信息。

编辑

如果您想动态设置其中一些属性(如下面的注释中所述),则可以创建一个properties.gradle文件(名称并不重要)并在build.gradle脚本中需要它。

properties.gradle

ext {
    subPath = "some/sub/directory"
    fullPath = "$projectDir/$subPath"
}

build.gradle

apply from: 'properties.gradle'

// prints the full expanded path
println fullPath


 类似资料:
  • 我正在处理一个Gradle脚本,其中我需要读取文件,并使用中属性文件中的值。我是以下面的方式做的。我运行了下面的脚本,它现在抛出了一个错误,但它也没有执行创建、删除和复制文件之类的操作。我试着打印变量的值,它显示了正确的值。 有人能告诉我这是不是正确的方法吗?我认为另一种方法是在中定义所有内容,并在中使用。有人能告诉我如何从中访问中的属性吗? 文件: 文件:

  • 问题内容: 在发布此问题之前,我用Google搜索Spring项目(不是基于Web的项目)中的属性。我很困惑,因为每个人都在谈论application- context.xml并具有类似的配置 但是,我正在使用Spring进行普通的Java项目(没有Web应用程序之类的东西)。但是我想从属性文件中获取一些通用属性,并且需要在JAVA文件中使用。如何通过使用Spring / Spring注释实现此目

  • 我有两个jenkins作业,第一个作业向artifactory发布一个jar文件,并向工件添加一个属性(提交id)。第二个作业总是从artifactory中提取最新版本的jar,但它还需要与该工件关联的属性。我们正在使用gradle进行构建。有没有办法进入gradle或者我们有其他选择吗? 编辑:作业不是管道的一部分。这意味着它们是独立的作业,第二个作业触发另一个存储库更改。

  • 在这种情况下,我必须读取某个属性文件,然后调用一个外部程序。 > 为了读取属性文件,我使用了属性Maven插件,在验证阶段使用 为了执行外部程序,我使用execmaven插件,调用goal 但是,如果我调用“mvn exec:exec”,则不会调用验证阶段,因此不会读取属性。 在我当前的场景中,我无法将exec:exec与任何特定的阶段联系起来(这是因为所有其他阶段都有非常具体的作业要处理,而我尝

  • 问题内容: 我正在尝试编写管道脚本以与Jenkins 2.0一起使用来复制我们现有的构建。这个原始版本使用envInject插件读取Java属性文件,但是我看不到如何从管道Groovy脚本中执行此操作。我已经用Google搜索并找到了以下内容,但是它不起作用(FileNotFoundException): 谢谢! 问题答案: 我只是昨天和今天为此而战。我希望此功能更容易找到。 抓住“ Pipeli

  • 问题内容: 我使用vfat驱动程序将FAT文件系统安装在Linux中。我想知道如何读取文件的vfat属性,例如“隐藏”和“只读”。 根据到目前为止的读物,如果我在文件上使用glibc命令,则只会得到此处列出的文件属性:http : //www.gnu.org/s/libc/manual/html_node/Attribute -Meanings.html#Attribute- Meanings 但