我正在使用Gradle构建一个jar,其中包含META-INF中的xml文件。此文件的行如下
<property name="databasePlatform" value="${sqlDialect}" />
允许针对不同环境使用不同的SQL数据库。我想告诉gradle从项目属性展开${SQLDialent}。
我试过这个:
jar {
expand project.properties
}
但是它因为GroovyRuntimeException
而失败,在我看来,Jar任务也试图扩展. class
文件中的属性。所以我尝试了
jar {
from(sourceSets.main.resources) {
expand project.properties
}
}
这不会引发上述异常,而是导致所有资源被复制两次—一次使用属性扩展,一次不使用属性扩展。我设法解决了这个问题
jar {
eachFile {
if(it.relativePath.segments[0] in ['META-INF']) {
expand project.properties
}
}
}
这正是我想要的,因为在我的用例中,我只需要扩展META-INF目录中文件的属性。但这感觉像一个相当丑陋的黑客,有没有更好的方法来做到这一点?
我在从maven迁移到gradle build时遇到过类似的问题。到目前为止,最简单/最简单的解决方案是自己简单地进行过滤,例如:
processResources {
def buildProps = new Properties()
buildProps.load(file('build.properties').newReader())
filter { String line ->
line.findAll(/\$\{([a-z,A-Z,0-9,\.]+)\}/).each {
def key = it.replace("\${", "").replace("}", "")
if (buildProps[key] != null)
{
line = line.replace(it, buildProps[key])
}
}
line
}
}
这将从指定的属性文件加载所有属性,并过滤所有“${some.property.here}”类型占位符。完全支持*中的点分隔属性。属性文件。
作为一个额外的好处,它不会像open()那样与$某某Var类型的占位符发生冲突。此外,如果占位符无法与属性匹配,它将保持不变,从而减少来自不同来源的属性冲突的可能性。
除了@emil lundberg的优秀解决方案之外,我还将资源处理限制为只处理所需的目标文件:
建筑格拉德尔
processResources {
filesMatching("**/applicationContext.xml") {
expand(project: project)
}
}
附加说明:如果${...}
括号导致“无法解决占位符”错误,您可以使用
我在一篇关于一个不同但密切相关的问题的帖子中偶然发现了这篇文章。原来您想要配置的是processResources任务,而不是jar任务:
processResources {
expand project.properties
}
不过,出于某种原因,我确实必须在Gradle注意到变化之前清理
一次。
问题内容: 我需要读取代码中的文件。它实际上位于此处: 我将其放在源包中,以便在创建可运行的jar文件(导出-> Runnable JAR文件)时将其包含在jar中。最初,我将其放在项目根目录中(并尝试了一个普通的子文件夹),但导出文件并未将其包含在jar中。 如果在我的代码中,我这样做: jar文件正确地找到了该文件,但是在本地运行(运行方式-> Java Main应用程序)会引发文件未找到异常
在扩展中经常需要保存C++指针,使用属性操作方法,需要分2条指令实现从属性 -> 资源变量 -> 指针的转换。 PHP-X提供了oGet和oSet两个方法来简化资源属性的操作。 设置指针 _this.oSet("propertyName", "ResourceType", new CppObject(1, 2)); 获取指针 CppObject *ptr = _this.oGet<CppObje
谢谢,
我的插件注册了一个扩展和一些从继承的自定义任务。
问题内容: 我知道还有其他针对同一问题的问题,但问题是解决方案对我不起作用。我有一个小工具,它应该读取我想拥有的文件并将其打包为资源,并依赖于其他我希望将其作为jar而不是单个类的项目(我正在使用Eclipse Helios)。 作为Eclipse中的应用程序,我可以通过以下方式访问资源 当且仅当将资源文件夹放置在输出路径(已编译的源)下时,并且如果将其放置在src文件夹中时,则不是这样。 当我打
前端篇 收集的前端面试题和答案 前端开发面试题 史上最全的web前端面试题汇总及答案 前端工程师手册 HTTP协议:工作原理 SSL/TLS协议运行机制的概述 协议篇 https 原理 HTTPS 原理解析 HTTPS 的工作原理 socket HTTP与WebSocket的区别 理解OAuth 2.0 后端篇 3年PHPer的面试总结 垃圾回收机制 S.O.L.I.D 面向对象设计 浅谈IOC—