当我使用以下命令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/**'
        }
    }
}
}

09-28 02:23