我的目标是建立一个简单的多模块项目,它使用 Spring Boot 2、Gradle 4.x 和 Vaadin 8.x 作为 UI。Vaadin 目前仅用于其中一个子项目,其他子项目提供服务或只是库。我从这个非常好的 Spring 教程开始,它(尽管使用了较旧的 Gradle 语法)生成了一个工作测试项目。它包含一个“libaray”子项目和一个“应用程序”子项目,具体取决于前者。“bootRun”和“bootJar”Gradle 任务都像魅力一样工作,并且在我将一些配置集中在父 build.grade 中后仍然有效。然后我将Vaadin Gradle Plugin添加到“应用程序”项目并更改端点以显示一个简单的 vaadin 标签。问题是,现在使用“bootRun”时,启动的应用程序不再能够访问它所依赖的“库”中的类。如果我删除代码中的任何依赖项,应用程序就可以工作,但是一旦我从“库”(例如“MyService”)中引用了一个类,它就会因“java.lang.ClassNotFoundException”而崩溃。但是,当使用“bootJar”部署相同的应用程序并运行 jar 时,一切正常,因此可以解决模块间依赖关系。现在我想知道我是否缺乏理解并且 Vaadin Gradle 插件需要额外/不同的模块依赖配置?或者这可能是 Vaadin Gradle 插件中的错误还是我的配置中的问题?我在没有得到任何线索的情况下阅读了这个插件的完整文档,已经在网上搜索过,但我既没有在这个特定的上下文中找到“NoClassDefFoundError”,也没有找到一个同时包含 Spring Boot 和 Vaadin 的工作多模块项目示例8.这是相关的示例代码(不包括导入):hello.app.DemoApplication@SpringBootApplication(scanBasePackages = "hello")@RestControllerpublic class DemoApplication { //Service defined in dependent sub-project private final MyService myService; public DemoApplication(MyService myService) { this.myService = myService; } public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}hello.app.StartUI/** Entry point for the Vaadin 8 UI */@SpringUI@SpringViewpublic class StartUI extends UI implements View { @Override protected void init(final VaadinRequest request) { setContent(new Label("Hello vaadin")); }}库gradle.propertiesplugins { id "io.spring.dependency-management" version "1.0.5.RELEASE" }ext { springBootVersion = '2.0.3.RELEASE' }jar { baseName = 'library' version = '0.0.1-SNAPSHOT'}dependencies { implementation('org.springframework.boot:spring-boot-starter') testImplementation('org.springframework.boot:spring-boot-starter-test')}dependencyManagement { imports { mavenBom("org.springframework.boot:spring-boot-dependencies:${springBootVersion}") }}
添加回答
举报
0/150
提交
取消