clojure(clara规则)文件

kzmpq1sx  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(406)

我有一个spring应用程序,它集成了从java类触发的clara规则引擎(clojure)文件。使用gradle构建应用程序时,clojure文件不会作为jar的一部分生成。
因此,在运行ther 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路径复制到build路径。它复制构建路径下的文件,但不在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")
    }
}
lqfhib0f

lqfhib0f1#

将clojure文件(clara规则)放在一个地方,在这个地方,它们最终位于jar中的正确位置,这将使复制任务变得难以解决(这不是用来构建jar的——至少从 build.gradle 我们可以从问题中看出。
将文件从 src/main/resources/au.com.acme.mti.mec.runtime.rulessrc/main/resources/au/com/acme/mti/mec/runtime/rules 扔掉那些垃圾 copyRules 任务(它是 dependsOn )

编辑:

添加了一个存储库,它显示了一个最小的工作示例,将clj文件放入资源中https://github.com/christoph-frick/try-java-clara

相关问题