我有这个项目结构:
- parent-project
- build.gradle
- gradle.properties
- child-project
- build.gradle
- src
- main
- java
- resources
- application.properties
- logback.xml
这是父构建。格拉德尔:
allprojects {
apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'maven'
group = 'com.test'
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
repositories {
mavenLocal()
maven {
url nexusRepo
credentials {
username = nexusUsername
password = nexusPassword
}
}
mavenCentral()
jcenter()
}
uploadArchives {
repositories {
mavenDeployer {
repository(url: nexusRepo) {
authentication(userName: nexusUsername, password: nexusPassword)
}
}
}
}
}
uploadArchives.enabled = false
我的格拉德尔。父项目的属性包括以下内容:
version=0.1.0-SNAPSHOT
这是儿童项目build.gradle:
plugins {
id 'org.springframework.boot' version '2.3.0.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'groovy'
id 'war'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
dependencies {
//spring boot related dependencies
...
implementation "com.xm.logback:jLogbackGelfAppender:1.1.0"
implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
implementation group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
implementation group: 'ch.qos.logback', name: 'logback-core', version: '1.2.3'
implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '6.3'
...
//testing related dependencies
}
这是子项目应用程序。特性:
prop.testserver.computer-name=${COMPUTERNAME}
...
# graylog properties
graylogHost=host.com
graylogPort=555
graylogSourceId=app_id_dev
我张贴道具的原因。测试服务器。computer name属性是因为我尝试使用gradle resourceProcess,但得到了有关此属性的错误。
这是我的日志。xml:
<!DOCTYPE configuration>
<configuration>
<contextName>${graylogSourceId}</contextName>
<jmxConfigurator/>
<springProperty scope="context" name="graylogHost" source="graylogHost"/>
<springProperty scope="context" name="graylogPort" source="graylogPort"/>
<springProperty scope="context" name="graylogSourceId" source="graylogSourceId"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<appender name="GELF" class="com.xm.logback.GelfAppender">
<server>${graylogHost}</server>
<port>${graylogPort}</port>
<protocol>TCP</protocol>
<includeSource>true</includeSource>
<includeMDC>true</includeMDC>
<additionalFields>
application=${graylogSourceId}
</additionalFields>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%m</pattern>
</layout>
</appender>
<logger name="com.test" level="INFO">
<appender-ref ref="GELF"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
我需要在登录中添加application_version,但我无法通过这个过程尝试不同的东西。
首先,我尝试使用这个选项
然后我补充道:
processResources {
filesMatching('application.properties') {
expand(project.properties)
}
}
到子项目build.gradle,我得到了这个错误:
Groovy模板扩展缺少属性(CompUTERNAME)。定义的键[父,类LoaderScope,配置,插件,对象,记录器,rootDir,项目注册表,路径,测试结果DirName,目标兼容性,java,规范化,bootJar,儿童项目,jar,状态,进程资源,服务注册工厂,任务,文本,项目Dir,依赖锁定,项目评估广播,依赖管理,项目路径,模块,继承范围,nexusBuilderUsername,版本,脚本,依赖关系,处理测试资源,webAppDir,扩展,模型注册表,安装,项目评估器,nexusBuilderUserPassword,项目配置器,存档基础名称,日志记录,配置操作,源兼容性,状态,子项目,组件,显示名称,引导战争,nexusDeployerUsername,父母标识符,测试类,antBuilderFactory,输出,标准输出捕获,docsDir,编译测试Groovy,默认任务,nexusRepo,构建脚本源,自动目标Jvm残疾人,报告Dir,sonarqube,基类LoaderScope,服务,汇编,gradle,distisDirName,构建文件,深度,突变状态,docsDirName,testResultsDir,构建文件,脚本HandlerFactory,deferredProjectConfiguration,项目,conf2ScopeMappings,groovyRuntime,存储库,nexusDeployerUserPassword,脚本PluginFactory,资源加载器,testReportDir,编译Groovy,mavenPomDir,组,工件,测试,配置目标标识符,编译Java,检查,webAppDirName,fileResolver,名称,testReportDirName,构建脚本,springBoot,过程操作,asDynamicObject,公共类型,类,标识路径,描述,源集,构建路径,文件操作,pluginManager,默认文物,类,模型模式存储,报告,约定,所有项目,蚂蚁,战争,资源,清洁,编译测试Java,布局,构建,listenerBuildoperationDecorator,libsDir,发行版,上传档案,根项目,libsDirName,属性,提供程序]
我需要从父gradle传递应用程序版本的帮助。属性到子项目logback。xml参数化。请帮忙,提前谢谢。
这里有两个步骤
您只需在应用程序中添加项目版本。属性
my_version=${project.version}
在logback.xml中使用my_version
另外${HOSTNAME}而不是${COMPUTERMNAME}。看见http://logback.qos.ch/manual/configuration.html
您当然可以在生成期间对属性文件执行搜索/替换。在您的情况下,它失败了,因为Gradle正在尝试扩展应用程序中的${COMPUTERNAME}
引用。属性文件。您可以通过使用filter
而不是expand
,或者通过将COMPUTERNAME
定义为带有值“${COMPUTERNAME}”的Gradle属性(基本上用自身替换该值)来解决此问题。但是,对于在您的logback配置中包括应用程序版本,有一个(IMHO)更优雅的解决方案。
SpringBoot的一个特性是将构建信息作为属性文件包含在应用程序中。在Gradle中,您可以通过以下方式启用它:
springBoot {
buildInfo()
}
该文件将在运行时类路径的META-INF/build-info下可用。属性
。然后,您可以将其作为属性源包含在Logback中:
<configuration>
<property resource="META-INF/build-info.properties" />
</configuration>
现在可以像对Spring属性所做的那样引用文件中的属性。尝试使用${build.version}
获取版本。
您还可以让Spring Boot打印启动信息消息中的版本。但这里你必须把它添加到清单中。MF文件,例如通过:
bootJar {
manifest {
attributes(
"Implementation-Title": project.name,
"Implementation-Version": archiveVersion
)
}
}
(请注意,只有当您运行实际的bootJar文件时,它才会被打印——在Gradle中运行bootRun
任务不会这样做。)
我正在使用gradle tooling api,我遇到了下面的场景。有一个应用某个插件P的项目,它只在传递shouldApplyP属性时才创建任务T。 因此,如果您将运行,您将看不到任务T,但是如果您将运行,您将看到任务T。 在gradle tooling api中,一旦创建了,我就可以执行 但我看不到这个具体的任务。是否有方法将此属性传递给项目连接,以便在方法中显示该属性?
是否有方法将命令行参数传递给Gradle中的buildSrc项目。buildSrc位于主项目中,如果我用-p传递命令行args,那么主项目将接收它们,但不接收buildSrc。我需要这样做的原因是,我试图将maven Repository的凭据传递给buildSrc,buildSrc反过来使用它来解决其子项目的依赖关系。
问题内容: 我有一个属性指令,其限制如下: 我需要传递两个属性;一个数字和一个函数/回调,使用对象在指令中访问它们。 如果指令是元素指令,那么我可以限制为: 但是,出于某种原因,我不再赘述,我需要将该指令作为属性指令。 如何将多个属性传递到属性指令中? 问题答案: 该指令可以访问在同一元素上定义的任何属性,即使该指令本身不是该元素也是如此。 模板: 指示: 如果attribute的值将被硬编码,则
我目前正在进行struts升级(从struts 1.x迁移到2.x) 我的项目有一个自定义标记处理程序类,用于格式化应用程序中的数字 TLD文件 FormatNumberTag类 JSP 这里,AccountBean是bean,floatingRate是属性 1)在标签处理程序类上面,(org.apache.struts.util.请求Utils)请求Utils.lookup 相应的方法是什么 2
我试图在mapbox gl地图上设置一个标记,点击地图,然后将lngLat对象传递回父组件。请告诉我怎样才能做到这一点。我刚开始学习反应,但我知道道具只能从父类继承,setState只能设置本地状态。 父组件如下所示 我正在学习这个教程https://github.com/laneysmith/react-mapbox-example
问题内容: 我想知道如何将JSF托管的bean属性传递给JavaScript函数。 像这样: 问题答案: 这不是JSF变量的“传递”。这只是打印JSF变量,就好像它们是JavaScript变量/值一样。您知道,JSF和JS根本不同步运行。JSF在Web服务器中运行,并生成HTML/ CSS / JS代码,一旦到达该代码,该代码又在Webbrowser中运行。 您的具体问题很可能是由于您以这种方式生