跳至主要內容

Idea IDE 常见问题

码匠君SASSpring Authorization ServerDante Cloud微服务领域驱动DDDSpring BootSpring CloudSpring SecuritySpring Cloud AlibabaSpring Cloud TencentOAuth2.1NacosSkywalkingSentinelSeata大约 5 分钟

Idea IDE 常见问题

[1]初次 install 或者 package 工程很慢

Maven 使用的基本逻辑

在 Maven 的术语中,仓库是一个位置(place)。

Maven 仓库是项目中依赖的第三方包库,这个库所在的位置叫做仓库。

Maven 仓库有三种类型:

  • 本地(local)
  • 中央(central)
  • 远程(remote)

Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。

运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。

为什么初次 Install 会很慢?

  1. 可能本工程中所使用的包并不是你常用的包,本工程的包尽可能用最新版本的代码,所以第一次使用会下载很多的包。根据自身网络的不同,依赖包的下载速度也会不同,编译所需要的时间也会不同。
  2. 可能目前你所使用的,还是默认的 Maven 源,默认的 Maven 源是国外源,通常访问都会很慢,甚至有访问响应超时的情况。根据自身网络的不同,依赖包的下载速度也会不同,编译所需要的时间也会不同。
  3. 为了方便调试单体版以及支持 Spring Boot Admin 查看 git 信息和 Docker 打包,在编译过程中工程默认是开启了 源代码打包Git信息打包以及资源包拷贝功能的,因为有更多的操作,势必会增加编译打包的时间。

提升编译速度的办法

  1. 提现下载好依赖包

初次使用本项目,在执行 InstallPackage 命令之前,打开 Idea Maven 面板,点击工具栏的刷新按钮,手动触发依赖包的下载,等所有包下载完成之后再在执行 InstallPackage 命令进行编译。刷新方式如下图所示:

架构图
架构图

说明

如果是使用 Idea,以直接从 Git 中 Clone 的方式创建的项目,那么在代码下载完成之后,通常会自动下载相关的依赖包

提示

可能会出现,虽然依赖包都下载完成了,但是 Idea Maven 面板中,仍旧存在一些依赖包“飘红”的现象。这是 Idea 没有实时读取完整依赖包的问题,只要能正常编译通过,就不会有任何问题。下次再打开 Idea 通常就不会有标红的内容。

  1. 更改为使用阿里 Maven 源。

如果你熟悉怎么改请略过,如果不熟悉,在线文档中:基础知识-> 本地开发环境中有说明具体怎么配置 Maven 以及本地源。配置方法

  1. 关闭编译辅助工具

可以在工程根目录中的 pom.xml 中,将对应 profiles 里面的 <skip.build.source.package>、<skip.copy.docker.resource>、<skip.build.git.commit.infoopen in new window> 三个属性值改为 true。这样可以减少打包内容,提升打包速度。

<profile>
    ······
    <properties>
        ······
        <!--跳过构建源代码包-->
        <skip.build.source.package>false</skip.build.source.package>
        <!--不copy代码包到docker构建目录-->
        <skip.copy.docker.resource>false</skip.copy.docker.resource>
        <!--不执行git commit 构建-->
        <skip.build.git.commit.info>false</skip.build.git.commit.info>
        ······
    </properties>
</profile>
  1. 修改为多线程编译

在 IDEA 中,默认是使用单线程进行 Maven 编译的。可以将其修改为多线程编译方式,可以提高一定的编译速度。

在 Idea 中,找点击 Settings... -> Build,Execution,Deployment -> Build Tools -> Maven。在 Maven 配置面板中。将 Thread Count 的值设置为 1C。这样可以进行多线程打包,提升打包速度,如下图所示:

架构图
架构图

[2]found character '@' that cannot start any token. (Do not use @ for indentation)

启动服务时,出现以下错误

16:01:05.726 [main] ERROR org.springframework.boot.SpringApplication - Application run failed
org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token
found character '@' that cannot start any token. (Do not use @ for indentation)
 in 'reader', line 7, column 13:
        active: @profile.name@
                ^

	at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:439)
	at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:248)
	at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(ParserImpl.java:633)
	at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:165)
	at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:59)
	at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:45)
	at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:140)
	at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:119)
	at org.yaml.snakeyaml.composer.Composer.composeScalarNode(Composer.java:221)
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:191)
	at org.yaml.snakeyaml.composer.Composer.composeKeyNode(Composer.java:309)
	at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:300)
	at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:288)
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:195)
	at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:313)
	at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:304)
	at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:288)
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:195)
	at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:313)
	at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:304)
	at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:288)
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:195)
	at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:115)
	at org.yaml.snakeyaml.constructor.BaseConstructor.getData(BaseConstructor.java:135)
	at org.springframework.boot.env.OriginTrackedYamlLoader$OriginTrackingConstructor.getData(OriginTrackedYamlLoader.java:99)
	at org.yaml.snakeyaml.Yaml$1.next(Yaml.java:512)

该问题主要是由于 bootstrap.yml 中使用了 @ @ 变量,而在 target 目录中生成的 bootstrap.yml中的 @ @ 变量没有被正确替换。

解决办法

办法一

使用 mvn installmvn package 命令重新编译工程。

办法二

在 IDEA 中,打开Maven面板,点击刷新按钮。如下图所示:

架构图
架构图

[3]Error running XXXApplication. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun

可以查询到的解决版本,基本上是通过修改 .idea 文件夹下的 idea/workspace.xml 文件解决。

这种办法并不是特比优雅,而且在最新的版本中不一定会起效。

比较简单的办法,是通过 IDEA 界面,修改配置即可以解决。具体操作如下:

步骤一

在 IDEA 工具栏中,找到 Edit Configurations ...,如下图所示。

Edit01
Edit01

步骤二

在弹出的 Edit Configurations ... 对话框中,首先找到运行时会出现 Command line is too long 应用名称。

UpmsApplication 为例,选中该应用,在右侧面板中,找到 Environment --> Shortent command line, 将该设置的值修改为 JAR manifest 即可解决。如下图所示:

Edit01
Edit01