zoukankan      html  css  js  c++  java
  • spring boot 在eclipse里启动正常,但打包后启动不起来

    现象描述:

    spring boot 在eclipse里启动正常,但打包后启动不起来。

    错误日志如下:

    D:Project>java -jar MKKY_CMS.jar
    
      .   ____          _            __ _ _
     /\ / ___'_ __ _ _(_)_ __  __ _    
    ( ( )\___ | '_ | '_| | '_ / _` |    
     \/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::        (v2.1.4.RELEASE)
    
    2019-06-12 17:26:15.510  INFO 74468 --- [           main] com.mkky.SuperviseBackstageApplication   : Starting SuperviseBackstageApplication v0.0.1-SNAPSHOT on DESKTOP-405G2C8 with PID 74468 (D:ProjectMKKY_CMS.jar started by dell in D:Project)
    2019-06-12 17:26:15.513  INFO 74468 --- [           main] com.mkky.SuperviseBackstageApplication   : The following profiles are active: dev
    2019-06-12 17:26:16.049  WARN 74468 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.mkky.SuperviseBackstageApplication]; nested exception is java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration
    2019-06-12 17:26:16.059  INFO 74468 --- [           main] ConditionEvaluationReportLoggingListener :
    
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    2019-06-12 17:26:16.065 ERROR 74468 --- [           main] o.s.boot.SpringApplication               : Application run failed
    
    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to process import candidates for configuration class [com.mkky.SuperviseBackstageApplication]; nested exception is java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration
            at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:599) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.access$900(ConfigurationClassParser.java:108) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.lambda$processGroupImports$1(ConfigurationClassParser.java:808) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at java.util.ArrayList.forEach(ArrayList.java:1249) ~[na:1.8.0_91]
            at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorGroupingHandler.processGroupImports(ConfigurationClassParser.java:804) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser$DeferredImportSelectorHandler.process(ConfigurationClassParser.java:774) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:185) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:315) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:232) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:275) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:95) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:705) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:531) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at com.mkky.SuperviseBackstageApplication.main(SuperviseBackstageApplication.java:16) [classes!/:0.0.1-SNAPSHOT]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_91]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_91]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_91]
            at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_91]
            at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [MKKY_CMS.jar:0.0.1-SNAPSHOT]
            at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [MKKY_CMS.jar:0.0.1-SNAPSHOT]
            at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [MKKY_CMS.jar:0.0.1-SNAPSHOT]
            at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:593) [MKKY_CMS.jar:0.0.1-SNAPSHOT]
    Caused by: java.lang.IllegalStateException: Error processing condition on org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration
            at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:64) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.context.annotation.ConditionEvaluator.shouldSkip(ConditionEvaluator.java:108) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:218) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.processMemberClasses(ConfigurationClassParser.java:361) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:263) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:242) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.context.annotation.ConfigurationClassParser.processImports(ConfigurationClassParser.java:589) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            ... 27 common frames omitted
    Caused by: java.lang.IllegalArgumentException: name
            at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:658) ~[na:1.8.0_91]
            at sun.misc.URLClassPath.findResource(URLClassPath.java:188) ~[na:1.8.0_91]
            at java.net.URLClassLoader$2.run(URLClassLoader.java:569) ~[na:1.8.0_91]
            at java.net.URLClassLoader$2.run(URLClassLoader.java:567) ~[na:1.8.0_91]
            at java.security.AccessController.doPrivileged(Native Method) ~[na:1.8.0_91]
            at java.net.URLClassLoader.findResource(URLClassLoader.java:566) ~[na:1.8.0_91]
            at org.springframework.boot.loader.LaunchedURLClassLoader.findResource(LaunchedURLClassLoader.java:57) ~[MKKY_CMS.jar:0.0.1-SNAPSHOT]
            at java.lang.ClassLoader.getResource(ClassLoader.java:1096) ~[na:1.8.0_91]
            at org.springframework.core.io.ClassPathResource.resolveURL(ClassPathResource.java:155) ~[spring-core-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.core.io.ClassPathResource.exists(ClassPathResource.java:142) ~[spring-core-5.1.6.RELEASE.jar!/:5.1.6.RELEASE]
            at org.springframework.boot.autoconfigure.thymeleaf.ThymeleafTemplateAvailabilityProvider.isTemplateAvailable(ThymeleafTemplateAvailabilityProvider.java:44) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.findProvider(TemplateAvailabilityProviders.java:158) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.autoconfigure.template.TemplateAvailabilityProviders.getProvider(TemplateAvailabilityProviders.java:145) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$ErrorTemplateMissingCondition.getMatchOutcome(ErrorMvcAutoConfiguration.java:195) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            at org.springframework.boot.autoconfigure.condition.SpringBootCondition.matches(SpringBootCondition.java:47) ~[spring-boot-autoconfigure-2.1.4.RELEASE.jar!/:2.1.4.RELEASE]
            ... 33 common frames omitted

    问题解决路径

    1. 最初怀疑是打包时缺少依赖包造成的,修改打包的方式

    <build>
            <finalName>xxxxx</finalName>
            <plugins>
                 <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                        <mainClass>com.xx</mainClass>
                        <layout>ZIP</layout>     
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                    </plugin>
            </plugins>
        </build>

    依赖包没有问题,还是报同样的错误。

    2. 排除依赖包的问题后,怀疑是jar包冲突的问题,网上有类似的

    https://stackoverflow.com/questions/32758000/java-lang-illegalstateexception-error-processing-condition-on-org-springframewo

    使用dependence查了  没有不同版本的依赖,排除

    3.怀疑是*config.java的配置问题,一个个移除进行测试,也排除掉了

    4.根据日志怀疑是Controller里排除的异常页面有问题,排查后没有发现

    5.怀疑是application_*.properties的配置问题

       一项项排查,发现跟这个有关

    spring.thymeleaf.prefix=static:/web/

    去除这个选项后,重新打包后可以启动成功。

    翻看源码ThymeleafProperties.java

    /**
     * Properties for Thymeleaf.
     *
     * @author Stephane Nicoll
     * @author Brian Clozel
     * @author Daniel Fern谩ndez
     * @author Kazuki Shimizu
     * @since 1.2.0
     */
    @ConfigurationProperties(prefix = "spring.thymeleaf")
    public class ThymeleafProperties {
    
        private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8;
    
        public static final String DEFAULT_PREFIX = "classpath:/templates/"; //1
    
        public static final String DEFAULT_SUFFIX = ".html";
    
        /**
         * Whether to check that the template exists before rendering it.
         */
        private boolean checkTemplate = true;
    
        /**
         * Whether to check that the templates location exists.
         */
        private boolean checkTemplateLocation = true;
    
        /**
         * Prefix that gets prepended to view names when building a URL.
         */
        private String prefix = DEFAULT_PREFIX;
    
        /**
         * Suffix that gets appended to view names when building a URL.
         */
        private String suffix = DEFAULT_SUFFIX;
    
        /**
         * Template mode to be applied to templates. See also Thymeleaf's TemplateMode enum.
         */
        private String mode = "HTML";
    
        /**
         * Template files encoding.
         */
        private Charset encoding = DEFAULT_ENCODING;
    
        /**
         * Whether to enable template caching.
         */
        private boolean cache = true;
    
        /**
         * Order of the template resolver in the chain. By default, the template resolver is
         * first in the chain. Order start at 1 and should only be set if you have defined
         * additional "TemplateResolver" beans.
         */
        private Integer templateResolverOrder;
    
        /**
         * Comma-separated list of view names (patterns allowed) that can be resolved.
         */
        private String[] viewNames;
    
        /**
         * Comma-separated list of view names (patterns allowed) that should be excluded from
         * resolution.
         */
        private String[] excludedViewNames;
    
        /**
         * Enable the SpringEL compiler in SpringEL expressions.
         */
        private boolean enableSpringElCompiler;
    
        /**
         * Whether hidden form inputs acting as markers for checkboxes should be rendered
         * before the checkbox element itself.
         */
        private boolean renderHiddenMarkersBeforeCheckboxes = false;
    
        /**
         * Whether to enable Thymeleaf view resolution for Web frameworks.
         */
        private boolean enabled = true;
    
        private final Servlet servlet = new Servlet();
    
        private final Reactive reactive = new Reactive();
    
        public boolean isEnabled() {
            return this.enabled;
        }
    
        public void setEnabled(boolean enabled) {
            this.enabled = enabled;
        }
    
        public boolean isCheckTemplate() {
            return this.checkTemplate;
        }
    
        public void setCheckTemplate(boolean checkTemplate) {
            this.checkTemplate = checkTemplate;
        }
    
        public boolean isCheckTemplateLocation() {
            return this.checkTemplateLocation;
        }
    
        public void setCheckTemplateLocation(boolean checkTemplateLocation) {
            this.checkTemplateLocation = checkTemplateLocation;
        }
    
        public String getPrefix() {
            return this.prefix;
        }
    
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
    
        public String getSuffix() {
            return this.suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    
        public String getMode() {
            return this.mode;
        }
    
        public void setMode(String mode) {
            this.mode = mode;
        }
    
        public Charset getEncoding() {
            return this.encoding;
        }
    
        public void setEncoding(Charset encoding) {
            this.encoding = encoding;
        }
    
        public boolean isCache() {
            return this.cache;
        }
    
        public void setCache(boolean cache) {
            this.cache = cache;
        }
    
        public Integer getTemplateResolverOrder() {
            return this.templateResolverOrder;
        }
    
        public void setTemplateResolverOrder(Integer templateResolverOrder) {
            this.templateResolverOrder = templateResolverOrder;
        }
    
        public String[] getExcludedViewNames() {
            return this.excludedViewNames;
        }
    
        public void setExcludedViewNames(String[] excludedViewNames) {
            this.excludedViewNames = excludedViewNames;
        }
    
        public String[] getViewNames() {
            return this.viewNames;
        }
    
        public void setViewNames(String[] viewNames) {
            this.viewNames = viewNames;
        }
    
        public boolean isEnableSpringElCompiler() {
            return this.enableSpringElCompiler;
        }
    
        public void setEnableSpringElCompiler(boolean enableSpringElCompiler) {
            this.enableSpringElCompiler = enableSpringElCompiler;
        }
    
        public boolean isRenderHiddenMarkersBeforeCheckboxes() {
            return this.renderHiddenMarkersBeforeCheckboxes;
        }
    
        public void setRenderHiddenMarkersBeforeCheckboxes(
                boolean renderHiddenMarkersBeforeCheckboxes) {
            this.renderHiddenMarkersBeforeCheckboxes = renderHiddenMarkersBeforeCheckboxes;
        }
    
        public Reactive getReactive() {
            return this.reactive;
        }
    
        public Servlet getServlet() {
            return this.servlet;
        }
    
        public static class Servlet {
    
            /**
             * Content-Type value written to HTTP responses.
             */
            private MimeType contentType = MimeType.valueOf("text/html");
    
            /**
             * Whether Thymeleaf should start writing partial output as soon as possible or
             * buffer until template processing is finished.
             */
            private boolean producePartialOutputWhileProcessing = true;
    
            public MimeType getContentType() {
                return this.contentType;
            }
    
            public void setContentType(MimeType contentType) {
                this.contentType = contentType;
            }
    
            public boolean isProducePartialOutputWhileProcessing() {
                return this.producePartialOutputWhileProcessing;
            }
    
            public void setProducePartialOutputWhileProcessing(
                    boolean producePartialOutputWhileProcessing) {
                this.producePartialOutputWhileProcessing = producePartialOutputWhileProcessing;
            }
    
        }
    
        public static class Reactive {
    
            /**
             * Maximum size of data buffers used for writing to the response. Templates will
             * execute in CHUNKED mode by default if this is set.
             */
            private DataSize maxChunkSize = DataSize.ofBytes(0);
    
            /**
             * Media types supported by the view technology.
             */
            private List<MediaType> mediaTypes;
    
            /**
             * Comma-separated list of view names (patterns allowed) that should be executed
             * in FULL mode even if a max chunk size is set.
             */
            private String[] fullModeViewNames;
    
            /**
             * Comma-separated list of view names (patterns allowed) that should be the only
             * ones executed in CHUNKED mode when a max chunk size is set.
             */
            private String[] chunkedModeViewNames;
    
            public List<MediaType> getMediaTypes() {
                return this.mediaTypes;
            }
    
            public void setMediaTypes(List<MediaType> mediaTypes) {
                this.mediaTypes = mediaTypes;
            }
    
            public DataSize getMaxChunkSize() {
                return this.maxChunkSize;
            }
    
            public void setMaxChunkSize(DataSize maxChunkSize) {
                this.maxChunkSize = maxChunkSize;
            }
    
            public String[] getFullModeViewNames() {
                return this.fullModeViewNames;
            }
    
            public void setFullModeViewNames(String[] fullModeViewNames) {
                this.fullModeViewNames = fullModeViewNames;
            }
    
            public String[] getChunkedModeViewNames() {
                return this.chunkedModeViewNames;
            }
    
            public void setChunkedModeViewNames(String[] chunkedModeViewNames) {
                this.chunkedModeViewNames = chunkedModeViewNames;
            }
    
        }
    
    }

    配置前缀的路径有问题。

  • 相关阅读:
    【CF516D】Drazil and Morning Exercise(换根DP预处理+暴力双指针)
    【CF538G】Berserk Robot(思维)
    【CF521D】Shop(贪心)
    【洛谷4827】[国家集训队] Crash 的文明世界(斯特林数+换根DP)
    斯特林数的基础性质与斯特林反演的初步入门
    【CF566C】Logistical Questions(点分治)
    【CF980D】Perfect Groups(仔细一想是道水题)
    【洛谷2597】[ZJOI2012] 灾难(支配树)
    2020CCPC长春站题解A D F H J K
    2020CCPC长春站自我反省
  • 原文地址:https://www.cnblogs.com/davidwang456/p/11011390.html
Copyright © 2011-2022 走看看