java - gradle构建时未生成Clojure(clara规则)文件
问题描述
我有一个 Spring 应用程序,它集成了从 java 类触发的 clara 规则引擎 (clojure) 文件。使用 gradle 构建应用程序时,不会生成 clojure 文件作为 JAR 的一部分。
因此,在运行 jar 时,它会引发以下异常:
Caused by: java.io.FileNotFoundException: Could not locate au/com/acme/mti/mec/runtime/rules/mec__init.class or au/com/acme/mti/mec/runtime/rules/mec.clj on classpath.
在构建/生成 jar 时,让 gradle 生成 clj 文件的最佳方法(或至少一种方法)是什么?
我已经在 build.gradle 文件中包含了一个任务,将 clj 文件从 src 路径复制到构建路径。它复制构建路径下的文件,但不在 jar 中。
构建.gradle:
plugins {
id 'org.springframework.boot' version '2.3.1.RELEASE'
id 'io.spring.dependency-management' version '1.0.9.RELEASE'
id 'java'
id 'jacoco'
}
group = 'au.com.acme.mti.mec'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
mavenLocal()
maven {
url "http://clojars.org/repo"
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.clojure:clojure:1.9.0'
implementation 'com.cerner:clara-rules:0.20.0'
implementation 'org.projectlombok:lombok'
}
}
task copyRules(type: Copy){
from 'src/main/resources/au.com.acme.mti.mec.runtime.rules/'
into 'build/classes/java/main/au/com/acme/mti/mec/runtime/rules/'
}
test {
test.dependsOn copyRules
useJUnitPlatform()
finalizedBy jacocoTestReport
}
jacocoTestReport {
reports {
xml.enabled false
csv.enabled false
html.destination file("${buildDir}/jacocoHtml")
}
}
解决方案
将 Clojure 文件(Clara 规则)放在一个地方,它们最终在 JAR 中的正确位置,会使复制任务变得过时(它不用于构建 JAR ——至少从build.gradle
我们的部分可以在问题中看到。
- 将文件从 移动
src/main/resources/au.com.acme.mti.mec.runtime.rules
到src/main/resources/au/com/acme/mti/mec/runtime/rules
- 摆脱
copyRules
任务(它是dependsOn
)
编辑:
添加了一个显示最小工作示例的存储库,它将 clj 文件放入资源https://github.com/christoph-frick/try-java-clara
推荐阅读
- javascript - 如果输入为空,如何禁用 html 按钮?
- excel - 删除excel中前缀相同但后缀不同的条目
- ios - 在 SwiftUI 中解码 Wordpress API 值时出现 StringProtocol 问题
- python - Pyglet-屏幕闪烁
- flutter - 在 flutter_typehead TypeAheadField 小部件中,如何自定义消息让用户知道没有找到匹配项?
- python - 我无法修复此 TypeError
- javascript - 为什么我在使用 React useReducer 时不能返回先前状态的地图
- excel - 如何在excel中计算两个日期之间的平均年龄
- perl - +CME ERROR: 100 在 perl 中执行 USSD 命令时
- python - 如何让 discord.py 中的机器人以指定的次数发送特定消息