当我使用以下命令gradlew -p fineract-provider/ build
在本地计算机上进行构建并将war文件复制到远程服务器时,它将与java -Djava.awt.headless=false -jar fineract-provider.war
命令一起正常运行,但是当我通过gitlab-CI运行相同的构建命令时,会自动将其复制到服务器并然后运行相同的java命令,我得到一个找不到类的异常,如下所示:
Picked up JAVA_TOOL_OPTIONS: -Dhttps.protocols=TLSv1.2
Exception in thread "main" java.lang.ClassNotFoundException: org.apache.fineract.ServerApplication
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:46)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:58)
以上正是它向控制台吐出的内容。
最佳答案
Fineract在gradle.build
中有一个设置,不包括主类。所以我只是改变了这个
if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) {
sourceSets {
main {
java {
exclude '**/Server*'
exclude '**/MariaDB4j*'
exclude '**/EmbeddedTomcatWithSSLConfiguration.java'
}
}
test {
java {
exclude '**/core/boot/tests/**'
}
}
}
}
对此
if (!(project.hasProperty('env') && project.getProperty('env') == 'dev')) {
sourceSets {
main {
java {
// exclude '**/Server*'
exclude '**/MariaDB4j*'
exclude '**/ServerWithMariaDB4jApplication.java'
// exclude '**/EmbeddedTomcatWithSSLConfiguration.java'
}
}
test {
java {
exclude '**/core/boot/tests/**'
}
}
}
}