今天拿到了公司项目的权限,兴高采烈地拉取代码后,发现无法正常启动。接下来就把我遇到的问题及解决办法跟大家进行分享,希望能给和我一样的小菜狗们一点点启发,欢迎讨论~
一、问题1:拉取代码后依赖爆红
拉取代码到本地电脑后,发现有一个公司自己写的依赖爆红,这是因为公司会有私服仓库,当我把maven仓库的setting.xml文件替换成公司的以后,这个依赖就正常导入啦。在公司中如果遇到这种问题,可以直接把同事的仓库CV一份哈哈哈,这样可能是最快的解决办法。有同学可能会期望通过反复clean+install的方式来解决依赖爆红的问题,如果咱反复多次了还是爆红,那或许可以试试我这个简单粗暴的方式哈。
二、问题2:启动项目时提示Command line is too long
解决了依赖爆红的问题,启动项目时又遇到了第二个问题,控制台提示Command line is too long(如下)。
根据网上的资料,有两种方法可以解决,亲试均有效~
1、 第一种是修改.idea\workspace.xml文件
在.idea\workspace.xml中,找到PropertiesComponent标签栏,然后添加以下代码就可以啦
<property name="dynamic.classpath" value="true" />
2、第二种更简单,只需要找到idea界面右上角的Edit Configuration,然后点击Environment,找到Shorten command line,选择JAR mainfest即可,具体操作如下。
以上两种方式任选一种就可以啦
三、问题3:项目启动后立即停止
解决了上面两个问题后,我终于可以启动项目了,但是启动后发现项目立马停止了(如下图),而且也没有报错,好生奇怪。
不怕报错,就怕有错还不报。我们首先要做的,就是定位异常,那么如何定位到问题呢?我的做法是通过try..catch来捕获启动时的异常,如下:
public class DesignApplication {
public static void main(String[] args) {
try {
SpringApplication.run(DesignApplication.class, args);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在启动类上加上try..catch后,再次启动,果然出现了异常信息。如下:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xXConfig': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'xx.xx.id' in value "${xx.xx.id}"
。。。。
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'xx.xx.id' in value "${xx.xx.id}"
。。。。
接下来就让我们进行异常分析吧!
异常信息提到,某配置类(XXConfig)的某变量(id)的值没有被读到,所以导致这个类出现创建异常。那我们首先找到这个XXConfig(如下所示)
@Data
@Configuration
public class XXConfig {
@Value("${xx.xx.id}")
private String id;
。。。。
}
我们可以发现,这个变量(id)的值是通过@Value的方式读取的,即本应是从配置文件中读到的,现在没有读成功,那大概率是配置文件的读取出了问题。
进而我们找到application.yml,发现里面写的是线上环境pro(如下图),并不是开发环境dev。而线上环境肯定是有权限限制的,所以才导致变量值未被读到,从而引起了项目启动立即停止的现象。我们将环境换成开发环境即可正常启动项目。真的真的太乌龙了。。。。。。
最后,我们来做个小总结。虽然最终问题很愚蠢,但是整个定位问题的过程还是可以迁移的,即我们可以通过try..catch来捕获异常,出现问题不可怕,定位不到才吓人哈哈哈。另外,拉取代码后,我们可以提前检查配置环境,第三个问题就是因为我拉取代码后没有查看环境导致的,如果一开始就看到配置文件中写的是pro,那估计不用那么费劲了。
最最后,还有个上文没有提到的点,也可能导致项目启动不起来,就是版本问题,jdk版本不一致也可能会导致启动报错哦,注意和公司保持一个版本的jdk即可避免。