作者:朱金灿

来源:https://blog.csdn.net/clever101

需要使用java实现一个http接口,同事推荐我使用SpringBoot。我使用的是开发环境是eclipse Oxygen.2 Release (4.7.2),jdk 1.8(64位),按照eclipse中创建springboot项目(maven)来创建工程项目。开始很顺利,编译通过,等运行时出现了java.lang.IllegalArgumentException: Sources must not be empty的错误,具体如下图:

出错信息如下:

然后我就开始我的折腾之旅了。上网搜了下开始以为了SpringBoot的版本有点低,在pom.xml中将SpringBoot从1.5.2.RELEASE改为1.5.9.RELEASE,然后使用maven更新工程,运行后依然出现一样的问题。再接着准备下载一个SpringBoot的专用开发工具STS,发现这个工具不支持Oxygen.2 Release (4.7.2),然后就去下载Eclipse最新版4.12。现在下来更新插件时发现qiang太厉害了,把maven的官网都堵住了,然后就想到把maven的更新源改为阿里云,具体是新建一个settings.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?><!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
--><!--| This is the configuration file for Maven. It can be specified at two levels:||  1. User Level. This settings.xml file provides configuration for a single user,|                 and is normally provided in ${user.home}/.m2/settings.xml.||                 NOTE: This location can be overridden with the CLI option:||                 -s /path/to/user/settings.xml||  2. Global Level. This settings.xml file provides configuration for all Maven|                 users on a machine (assuming they're all using the same Maven|                 installation). It's normally provided in|                 ${maven.home}/conf/settings.xml.||                 NOTE: This location can be overridden with the CLI option:||                 -gs /path/to/global/settings.xml|| The sections in this sample file are intended to give you a running start at| getting the most out of your Maven installation. Where appropriate, the default| values (values used when the setting is not specified) are provided.||-->
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!-- localRepository| The path to the local repository maven will use to store artifacts.|| Default: D:/m2/repository--><localRepository>D:\Software\DevTools\m2\repository</localRepository> <!-- 此处更改本地仓库的目录--><!-- interactiveMode| This will determine whether maven prompts you when it needs input. If set to false,| maven will use a sensible default value, perhaps based on some other setting, for| the parameter in question.|| Default: true<interactiveMode>true</interactiveMode>--><!-- offline| Determines whether maven should attempt to connect to the network when executing a build.| This will have an effect on artifact downloads, artifact deployment, and others.|| Default: false<offline>false</offline>--><!-- pluginGroups| This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.| when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers| "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.|--><pluginGroups><!-- pluginGroup| Specifies a further group identifier to use for plugin lookup.<pluginGroup>com.your.plugins</pluginGroup>--></pluginGroups><!-- proxies| This is a list of proxies which can be used on this machine to connect to the network.| Unless otherwise specified (by system property or command-line switch), the first proxy| specification in this list marked as active will be used.|--><proxies><!-- proxy| Specification for one proxy, to be used in connecting to the network.|<proxy><id>optional</id><active>true</active><protocol>http</protocol><username>proxyuser</username><password>proxypass</password><host>proxy.host.net</host><port>80</port><nonProxyHosts>local.net|some.host.com</nonProxyHosts></proxy>--></proxies><!-- servers| This is a list of authentication profiles, keyed by the server-id used within the system.| Authentication profiles can be used whenever maven must make a connection to a remote server.|--><servers><!-- server| Specifies the authentication information to use when connecting to a particular server, identified by| a unique name within the system (referred to by the 'id' attribute below).|| NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are|       used together.|<server><id>deploymentRepo</id><username>repouser</username><password>repopwd</password></server>--><!-- Another sample, using keys to authenticate.<server><id>siteServer</id><privateKey>/path/to/private/key</privateKey><passphrase>optional; leave empty if not used.</passphrase></server>--></servers><!-- mirrors| This is a list of mirrors to be used in downloading artifacts from remote repositories.|| It works like this: a POM may declare a repository to use in resolving certain artifacts.| However, this repository may have problems with heavy traffic at times, so people have mirrored| it to several places.|| That repository definition will have a unique id, so we can create a mirror reference for that| repository, to be used as an alternate download site. The mirror site will be the preferred| server for that repository.|--><mirrors><!-- mirror| Specifies a repository mirror site to use instead of a given repository. The repository that| this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used| for inheritance and direct lookup purposes, and must be unique across the set of mirrors.|--><!-- 以下为我替换后的地址,使用的阿里云的仓库--><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf>        </mirror></mirrors><!-- profiles| This is a list of profiles which can be activated in a variety of ways, and which can modify| the build process. Profiles provided in the settings.xml are intended to provide local machine-| specific paths and repository locations which allow the build to work in the local environment.|| For example, if you have an integration testing plugin - like cactus - that needs to know where| your Tomcat instance is installed, you can provide a variable here such that the variable is| dereferenced during the build process to configure the cactus plugin.|| As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles| section of this document (settings.xml) - will be discussed later. Another way essentially| relies on the detection of a system property, either matching a particular value for the property,| or merely testing its existence. Profiles can also be activated by JDK version prefix, where a| value of '1.4' might activate a profile when the build is executed on a JDK version of '1.4.2_07'.| Finally, the list of active profiles can be specified directly from the command line.|| NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact|       repositories, plugin repositories, and free-form properties to be used as configuration|       variables for plugins in the POM.||--><profiles><!-- profile| Specifies a set of introductions to the build process, to be activated using one or more of the| mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>| or the command line, profiles have to have an ID that is unique.|| An encouraged best practice for profile identification is to use a consistent naming convention| for profiles, such as 'env-dev', 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc.| This will make it more intuitive to understand what the set of introduced profiles is attempting| to accomplish, particularly when you only have a list of profile id's for debug.|| This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.<profile><id>jdk-1.4</id><activation><jdk>1.4</jdk></activation><repositories><repository><id>jdk14</id><name>Repository for JDK 1.4 builds</name><url>http://www.myhost.com/maven/jdk14</url><layout>default</layout><snapshotPolicy>always</snapshotPolicy></repository></repositories></profile>--><!--| Here is another profile, activated by the system property 'target-env' with a value of 'dev',| which provides a specific path to the Tomcat instance. To use this, your plugin configuration| might hypothetically look like:|| ...| <plugin>|   <groupId>org.myco.myplugins</groupId>|   <artifactId>myplugin</artifactId>||   <configuration>|     <tomcatLocation>${tomcatPath}</tomcatLocation>|   </configuration>| </plugin>| ...|| NOTE: If you just wanted to inject this configuration whenever someone set 'target-env' to|       anything, you could just leave off the <value/> inside the activation-property.|<profile><id>env-dev</id><activation><property><name>target-env</name><value>dev</value></property></activation><properties><tomcatPath>/path/to/tomcat/instance</tomcatPath></properties></profile>--></profiles><!-- activeProfiles| List of profiles that are active for all builds.|<activeProfiles><activeProfile>alwaysActiveProfile</activeProfile><activeProfile>anotherAlwaysActiveProfile</activeProfile></activeProfiles>-->
</settings>

然后在选择”Window”——”Preferences”进行设置,如下图:

借助这个eclipse的插件更新了,然后再更新工程编译运行,启动项目时报错:

org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

查了一下资料,解决办法是加上@EnableAutoConfiguration注解,具体参考:关于spring boot org.springframework.context.ApplicationContextException:Unable to start Embedded解决方案

然后再编译运行,出现一个新错误:

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is java.lang.NoSuchMethodError: org.apache.catalina.Context.addServletMapping(Ljava/lang/String;Ljava/lang/String;)V

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:536) ~[spring-context-4.3.7.RELEASE.jar:4.3.7.RELEASE]

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) [spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at com.test.springboot.springboot_first.SpringBootApplicationFirst.main(SpringBootApplicationFirst.java:14) [classes/:na]

Caused by: java.lang.NoSuchMethodError: org.apache.catalina.Context.addServletMapping(Ljava/lang/String;Ljava/lang/String;)V

at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.addServletMapping(TomcatEmbeddedServletContainerFactory.java:290) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.addDefaultServlet(TomcatEmbeddedServletContainerFactory.java:270) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.prepareContext(TomcatEmbeddedServletContainerFactory.java:215) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:178) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ~[spring-boot-1.5.2.RELEASE.jar:1.5.2.RELEASE]

... 8 common frames omitted

再将SpringBoot从1.5.2.RELEASE改为1.5.9.RELEASE,依然一样的错误。到网上搜了一条信息:

Caused by: java.lang.NoSuchMethodError: org.apache.catalina.Context.addServletMapping(Ljava/lang/Str

将SpringBoot从1.5.9.RELEASE再改为2.0.2.RELEASE,然后用maven更新工程,编译运行,这下终于好了。

不过我还有一些疑问:我最新建立的工程在我的一个朋友的机器上是能正常运行的,到底是什么原因造成了这个错误呢?

记一次艰难的SpringBoot折腾过程相关推荐

  1. 记一次SQL Server2005导入Oracle10G的折腾过程【供多种数据库导入导出数据的C#程序源码参考】...

    曾经很早的时候用 SQL Server2000 时就见过我们老大,用 SQL Server2000 的导入导出功能,把数据都导入到了 Oracle9 里去,所以我也对导入导出数据有充分的信心,绝对能做 ...

  2. 记一次定位解决SpringBoot中内嵌Tomcat的Bug问题

    你知道的越多,不知道的就越多,业余的像一棵小草! 你来,我们一起精进!你不来,我和你的竞争对手一起精进! 编辑:业余草 segmentfault.com/a/1190000038760707 推荐:h ...

  3. SpringBoot启动过程详解

    Spring Boot通常有一个名为*Application的入口类,在入口类里有一个main方法,这个main方法其实就是一个标准的java应用的入口方法. 在main方法中使用SpringAppl ...

  4. 记一次网站无法访问解决过程,服务器80端口问题解决过程

    记一次网站无法访问解决过程,服务器80端口问题解决过程 参考文章: (1)记一次网站无法访问解决过程,服务器80端口问题解决过程 (2)https://www.cnblogs.com/slyzly/a ...

  5. 记一次艰难的重装系统

    记一次艰难的重装系统 描述 买了新电脑,心血来潮,想给"旧"电脑换个系统,考虑到新电脑已经换上了win10 pro,这台老电脑我打算装成伪服务器,用来跑程序,思来想去,还是装了万金 ...

  6. 超精简R2S固件折腾过程

    目录 前言: 一.搭建环境 二.拉取代码 三.进入配置界面 四.编译 五.效果展示 前言: 从开始折腾到编译出自己想要的效果,因为平时要上班的关系,整个过程断断续续花了大概2周的时间,下面记录一下自己 ...

  7. 记一次打包源码的过程

    记一次打包源码的过程  黑客攻防  Panni_007  2013-06-28  401浏览  0评论 http://panni007.com/2013/06/28/1228.html 0×01 起因 ...

  8. Mac OS X 雪豹的GA-P55A-UD3R 多显卡顺利搞定,附折腾过程

    年初购买的新机器. 配置: GA-p55A-ud3r f8 . 4G DDR3 HD 5770显卡. 其实这个机器安装倒挺顺利.安装完就让我悲剧的就是这个5770显卡.因为工作原因,我必须使用DX11 ...

  9. 记一次Mac mini折腾过程(鼠键共享,更换SSD)

    (本文纯属随意记录,也懒得分开来写) 从公司网管那捣鼓来一个"遗弃" Mac mini,说其它人觉得用起来太卡,正好我的工作PC( CPU 4×i3,MEM 8G, HDD 500 ...

最新文章

  1. Spring 学习笔记
  2. SQLSERVER2000同表数据复制(部分复制)
  3. linux网关0.0.0.0是什么意思_Linux软件安装⑦|DeePMD-kit v1.0
  4. python学到什么程度可以写爬虫-刚开始学习 Python 到可以写出一个爬虫大约需要多长时间...
  5. SpringBoot 修改banner信息
  6. MyCat数据库分片
  7. Android之GridView(九宫图)
  8. SpringBoot 路径访问控制
  9. 数据结构 实践项目——数据结构、算法、程序设计
  10. 使用JDBC+JSP分层实现新闻管理系统注册、登录功能
  11. 第六届中国电子信息博览会今日正式开幕,智享新时代!
  12. CSDN-markdown编辑器语法说明
  13. android测试云模拟器,基于Android模拟器的调研
  14. linux系统LCD驱动(二):mtk lcd驱动fb_info初始化
  15. 石油化工设备维护检修规程_超级石化好文推荐:提升石化设备管理水平 最新修订版维护检修规程!...
  16. 小学-综合素质【6】
  17. 欧洲杯:匈牙利vs葡萄牙时间:06-15 23:59 星期二
  18. 依赖于 mysql-server-5.5; 然而: 软件包 mysql-server-5.5 尚未配置。dpkg: error processing mysql-server (--configur
  19. 0基础python笔记str/list/tuple/dict
  20. 基于注解的Excel导出万能模板

热门文章

  1. SD卡FAT32文件结构(2)---创建与写入BMP位图
  2. 家用电路 空调 小小知识点
  3. mysql的text与tinytext_「mediumtext」MySQL中tinytext、text、mediumtext和longtext等各个类型详解 - seo实验室...
  4. JS冒泡排序和快速排序
  5. c 服务器发送数据源码,c语言实现http服务器和浏览器进行数据交换
  6. 颜色(一):UIColor
  7. RoundRobin算法的简单实现
  8. php签到表怎么建,PHP如何实现签到功能
  9. 7.23引以为戒 马后炮不如加强系统监控(1)
  10. DXP中如何寻找未连接的网络