(依赖)在父项目(gradle)中找不到嵌入式tomcat spring-boot jar的Spring MVC模板?

时间:2018-03-17 21:08:11

标签: spring spring-mvc spring-boot

我有一个小型的春季启动应用程序,可以进行用户管理。
我想在我的其他spring-boot应用程序中将此UserManagement应用程序作为依赖项(gradle)包含在内。

我不想将UserManagement应用程序作为独立应用程序运行(它需要与父应用程序共享bean)。

我正在使用gradle和spring-boot插件。 我已将UserManagement jar作为依赖项包含在spring-boot ExampleApp中。

UserManagement应用程序在端口8081上运行嵌入式tomcat服务器。
ExampleApp在端口8080上运行嵌入式tomcat服务器。

除了我的UserManagement MVC UI之外,一切运作良好。
当我在端口8081上点击User-Management应用程序时,找不到我的MVC模板。

我似乎无法从父应用程序ExampleApp找到UserManagement应用程序的MVC模板。
弹簧靴是否可以实现这一点?

1 个答案:

答案 0 :(得分:0)

是。你可以这样做。我不确定你是如何分享豆类的,但我想你也可以这样做。

<强> SpringApplicationBuilder  
 由于“UserManagement”应用程序是一个依赖项,我假设您正在调用一种方法从您的父应用程序运行它

例如,你可能正在做这样的事情:

public class UserManagementApplication {
    private static UserManagementApplication instance = null;

    private final SpringApplicationBuilder springApplicationBuilder;
    private ConfigurableApplicationContext context;

    private UserManagementApplication() {
       this.springApplicationBuilder = new SpringApplicationBuilder(UserManagementApplication.class);
    }

    public static void start() {
        synchronized (UserManagementApplication.class) {
            if (instance == null) {
                /*
                 ******** If singleton instance is null ***************************************
                 ******** Create a new UserManagementApplication ******************************
                 */
                instance = new UserManagementApplication();
            }

            if (instance.context == null
                    || !instance.context.isActive()) {
                /*
                 ******** If the context is null or not active ********************************
                 ******** Create new SpringApplication and run it  ****************************
                 ******** Store the resulting ConfigurableApplicationContext in memory ********
                 */
                instance.context = instance.springApplicationBuilder.run(new String[]{});
            }
        }
    }

    public static void stop() {
        synchronized (UserManagementApplication.class) {
            if (instance == null
                    || instance.context == null
                    || !instance.context.isActive()) return;
            /*
             ******** If the context is active ********************************************
             ******** Close the context  **************************************************
             ******** Set context back to null ********************************************
             */

            instance.context.close();
            instance.context = null;
        }
    }

    public static ConfigurableApplicationContext getContext() {
        if (instance == null) return null;
        return instance.context;
    }
}

用户管理gradle.build和位置

  1. 因为您不需要以“UserManagement”应用程序的身份运行 可执行jar,你可以抛弃spring-boot插件并制作你的 自己的罐子。
  2. 由于你使用的是tomcat,你可以放置模板和静态 META中的资源和WEB-INF中的模板。
    • 资源=&gt;的src /主/资源/ META-INF /资源/静态/
    • Templates =&gt;的src /主/资源/ WEB-INF /模板/
  3. 例如,您的gradle构建可能如下所示:

    buildscript {
        ext {
            springBootVersion = '2.0.0.M7'
        }
        repositories {
            mavenCentral()
            maven { url "https://repo.spring.io/snapshot" }
            maven { url "https://repo.spring.io/milestone" }
            maven { url 'http://repo.spring.io/plugins-release' }
        }
        dependencies {
            classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
            classpath 'io.spring.gradle:propdeps-plugin:0.0.9.RELEASE'
            classpath 'org.springframework:springloaded:1.2.6.RELEASE'
        }
    }
    
    ext {
        springBootVersion = '2.0.0.M7'
    }
    apply plugin: 'java'
    apply plugin: 'eclipse'
    apply plugin: 'idea'
    apply plugin: 'groovy'
    // apply plugin: 'org.springframework.boot'
    apply plugin: 'io.spring.dependency-management'
    apply plugin: 'propdeps'
    apply plugin: 'propdeps-idea'
    
    group = 'com.example.userManagement'
    
    sourceCompatibility = 1.8
    
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/snapshot" }
        maven { url "https://repo.spring.io/milestone" }
    }
    
    configurations {
        includeInJar
    }
    
    dependencies {
        compile('org.springframework.boot:spring-boot-starter-data-jpa')
        compile('org.springframework.boot:spring-boot-starter-web')
        compile('org.springframework.boot:spring-boot-starter-groovy-templates')
        compile('org.codehaus.groovy:groovy')
    
        includeInJar("org.webjars:bootstrap:4.0.0")
        includeInJar("org.webjars:jquery:3.3.1")
        configurations.compile.extendsFrom(configurations.includeInJar)
    }
    
    idea {
        module {
            inheritOutputDirs = true
        }
    }
    
    jar {
        from configurations.includeInJar.collect { it.isDirectory() ? it : zipTree(it) }
    }
    
    compileJava.dependsOn(processResources)
    

    MVC配置

    此外,请确保您的MVC配置知道资源的位置。
    例如,如果要扩展WebMvcConfigurerAdapter:

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/static/**").addResourceLocations("classpath:META-INF/resources/static/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:META-INF/resources/webjars/");
        registry.addResourceHandler("/**").addResourceLocations("classpath:META-INF/");
    }
    

    MVC模板

    如果你在src / main / resources / META-INF / resources / static / js中有一个“my-bundle.min.js”文件,你可以从你的mvc模板中找到它,如下所示:

    <script src="/resources/static/js/my-bundle.min.js"></script>
    



    我希望这有帮助!