Spring Boot项目遇到的问题

目录

Spring Boot导入项目

遇到错误:

maven不能导入pom.xml的依赖

导入的包中,部分import的包无法找到,也就是model目录下的文件

子项目中import另一个子项目的包,不能找到路径

运行测试用例,在test/java上run all test,运行到一半有报错

springboot 打包exclude排除部分配置文件

遇到问题:

exclude无法排除,生成的jar包里依然有需要排除的文件

生产环境需要prod.properties,测试环境需要local.properties和prod.properties。

生产环境下的包里不能有硬编码公网ip和mac地址

遇到问题:

0.0.0.0是什么意思

公网和私网


Spring Boot导入项目

遇到错误:


maven不能导入pom.xml的依赖

原因是因为,setting-->Build,Execution,Deployment-->Build Tools-->Maven的

Maven home path,User setting file和Local repository路径都要设置成本地的正确路径,设置完即可全部导入。

导入的包中,部分import的包无法找到,也就是model目录下的文件

使用maven install,因为之前已经使用了mvn clean install和mvn clean package Dmaven.test.skip=true安装了两个项目到本地,因此直接install(勾选skip test再install),可以生成model目录以及相应的文件。

子项目中import另一个子项目的包,不能找到路径

原因是另一个子项目,并没有被当做一个maven项目,右键这个项目,再maven->reload即可。

运行测试用例,在test/java上run all test,运行到一半有报错

java: Compilation failed: internal java compiler error

解决方法如下

Compilation failed: internal java compiler error_Camel-CSDN博客

主要的原因是因为,当前导入的这个项目很大,堆的大小默认值700MB是不够的,因此把他改为1024,运行通过。

在setting-->Build,Execution,Deployment-->Compiler 中找到build process heap size(Mbytes):700改为1024(视情况而定)

springboot 打包exclude排除部分配置文件

遇到问题:

exclude无法排除,生成的jar包里依然有需要排除的文件

SpringBoot生产环境打包去除无用依赖 - 代码先锋网

SpringBoot项目Maven打包时去掉不需要的资源或文件方法总结 – 那啥快看 (791202.com)

(31条消息) spring boot maven打包时排除资源目录_Loser-CSDN博客_spring-boot-maven-plugin 排除文件

Maven打包的时候排除指定的资源、目录、文件和程序类的方法 - 知乎 (zhihu.com)

这里遇到了一个问题,更改完pom后,package打包仍然没有排除,原因是这里应当先clean,再validate,之后complie,package。因为这是maven的整个生命周期


生产环境需要prod.properties,测试环境需要local.properties和prod.properties。

​​​​​​maven profile多环境自动切换配置,配置分离,排除文件 - 练好本领,报国杀敌 - 博客园

Maven根据不同环境打包不同配置文件_bxp1321的博客-CSDN博客

maven内置变量 - 简书

Maven profile节点配置详解_FantasyWxw的博客-CSDN博客_maven profiles配置

这时需要使用maven的profiles,根据mvn命令行-P的不同参数,指定进如对应的profiles,设置变量值。

比如命令行是

mvn clean package -Ptest -Dmaven.test.skip=true

pom.xml里额外添加

<dependencies>
...
</dependencies>
<profiles>
    <profile>
        <id>
            test
        </id>
        <properties>
            <profile.act1>local</profile.act1>
            <profile.act2>prod</profile.act2>
        </properties>
    </profile>
    <profile>
        <id>
            prod
        </id>
        <properties>
            <profile.act1>prod</profile.act1>
            <profile.act2>prod</profile.act2>
        </properties>
    </profile>
</profiles>
<build>
    <resources>
        <resource>
            <directory>...</directory>
            <excludes>
                <exclude>local.properties</exclude>
                <exclude>prod.properties</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>...</directory>
            <includes>
                <include>${profile.act1}.properties</include>
                <include>${profile.act2}.properties</include>
            </includes>
        </resource>
    </resources>
    <plugins>
      ...  
    </plugins>
</build>

一开始我的目录结构是

resources

--application.properties

--properties

  --prod

    --application-prod.properties

--properties

  --local

    --application-local.properties

尽管这样在本地打包的时候通过resource配置仍然可以在打包的时候正确生成选择想要的properties文件,但是静态检查的时候却不能通过。因此更改目录结构

resources

--application.properties

--application-prod.properties

--application-local.properties

然后再exclude标签之中使用变量${profiles.act},使其生效,但是这里有一个疑问,就是我一开始使用这个变量的时候,idea报错说找不到这个变量。

这之后我的思路是,先使用exclude将所有properties排除掉,然后在使用include选择自己需要的文件。但是这个时候在静态检查的地方,不论是使用test的profiles还是prod的profiles,里面都把所有的文件exclude了,而没有include。这里面我猜测的原因是,exclude的优先级高于include,虽说我分开使用了两个resource分别添加,并且在本地打包时是生效的。但是静态检查的时候不知道怎么回事,就直接将这两个resource的内容一起判定了。这里可能是我的理解有误,不论在哪个resource标签下的元素,都会在一起来比较优先级吧,但是如果是这样的话,我的本地也应该出错的。

更改后的如下

<dependencies>
...
</dependencies>
<profiles>
    <profile>
        <id>
            test
        </id>
        <properties>
            <profile.act1></profile.act1>
        </properties>
    </profile>
    <profile>
        <id>
            prod
        </id>
        <properties>
            <profile.act1>local.properties</profile.act1>
        </properties>
    </profile>
</profiles>
<build>
    <resources>
        <resource>
            <directory>...</directory>
            <excludes>
                <exclude>${profile.act1}</exclude>
            </excludes>
        </resource>
    </resources>
    <plugins>
      ...  
    </plugins>
</build>

遇到的报错:

Cannot resolve classpath entry: D:\src\main.......\${profiles.act1}

原因:profiles.act1的值没加载,没有设置mvn打包时的profiles是什么,也就是-P参数,idea启动可以在maven右侧栏中选择profiles。

生产环境下的包里不能有硬编码公网ip和mac地址

遇到问题:

0.0.0.0是什么意思

严格说来,0.0.0.0已经不是一个真正意义上的IP地址了。
  它表示的是这样一个集合:
  1、所有不清楚的主机和目的网络。这里的“不清楚”是指在本机的路由表里没有特定条目指明如何到达。
  2、对本机来说,它就是一个“收容所”,所有不认识的“三无”人员,一 律送进去。
  3、如果在网络设置中设置了缺省网关,那么Windows系统会自动产生一个目的地址为0.0.0.0的缺省路由。

公网和私网

公网和私网的范围_百度知道 (baidu.com)

127.0.0.1

127.0.0.1是本地ip,不是公网ip

日志打印ip

遇到问题:

slf4j的配置文件在哪

logback.xml

打印日志中的线程名怎么修改

正则表达式验证Ip地址(绝对正确)_十案圈圈的博客-CSDN博客_正则表达式ip地址

logback logback.xml常用配置详解(二)<appender>_萧乡月夜的博客-CSDN博客

[%replace(%thread){'\s', ''}]
[%replace(%thread){r"^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.((1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.){2}(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$" + "-", ''}]

ip:端口

^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\:([0-9]|[1-9]\d{1,3}|[1-5]\d{4}|6[0-5]{2}[0-3][0-5])$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值