首页 > 解决方案 > 异常:java.lang.ClassNotFoundException:gitlab-ci 的 org.apache.fineract.ServerApplication

问题描述

当我使用以下命令从本地计算机构建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)

以上正是它向控制台吐出的内容。

标签: javagradlegitlab-ci

解决方案


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/**'
        }
    }
}
}


推荐阅读