IntelliJ IDEA知识集锦
IDEA是一个历史悠久的Java集成开发环境,它始于2001年,以智能化著称。IDEA基于IntelliJ平台,分为社区版、商业版。IDEA目前自带JRE,此JRE仅仅用于IDEA的运行,不能做开发用。
在IDEA中,你总是在“工程”的上下文中工作,工程代表了一个完整的软件解决方案,包括代码助手、重构、代码风格一致性在内的功能都在工程内进行。
工程本身不包含开发相关的内容,例如源码、构建脚本或者文档。它主要用于组织模块并提供公共的设置。模块才是代码的容器。
IDEA使用普通的XML文件来存储工程的配置信息、及其包含的组件。并支持两种存储工程配置的格式:
基于目录的格式 |
在工程目录下的 .idea 子目录中存放配置,该子目录包含一系列XML文件,包括:compiler.xml、encodings.xml、modules.xml等 这些文件记录工程本身的核心信息,包括:模块组件的名称和位置、编译器设置等,可以存放到VCS。一个例外是workspace.xml,该文件存储个人设置(例如窗口位置)以及其它附属于开发环境的信息,不应该存放到VCS |
基于文件的格式 |
在工程目录中使用两类文件:
|
IDEA允许在这两种格式之间进行转换:File ⇨ Save as Directory-Based Format
模块是工程中一个可以独立编译、运行、调试、测试的单元。模块的配置信息默认存放在其内容根目录(Content root folder)下的 .iml 文件中,该文件一般存放到VCS。
Content root指的是包含模块所有文件目录。IDEA允许一个模块拥有多个Content root,但是通常都是一个。
某些时候没有Conent root的模块会有特殊用途,例如用来指定一组依赖关系。
IDEA使用不同图标来区分模块中不同的目录。你可以在目录上右键 ⇨ Mark Directory As来设置目录的类型。常用的目录类型及图标包括:
图标 | 目录类型说明 |
Content Root:标识一个模块的内容根目录 | |
普通目录 | |
源代码根目录,如果把某个目录分配为此类型,则IDEA会在构建过程中编译其中的源代码 | |
自动生成的源代码根目录 | |
测试源代码根目录,用于将测试代码和产品代码隔离 | |
自动生成的测试源代码根目录 | |
资源文件根目录,在构建过程中会原样拷贝到输出目录 | |
测试资源文件根目录 | |
排除目录,这类目录“几乎”被IDEA忽略 将某些不重要的目录设置为排除目录,可以提高IDE的性能 |
一个模块的依赖是指,该模块使用的(因而依赖于的)其它实体。一个模块依赖可以是:模块使用的SDK、模块使用的库、相同工程中的其它模块。术语“模块依赖”专指第三种。
依赖的优先级由Project Structure ⇨ Modules ⇨ Dependencies页签指定,你可以手工调整顺序:
顺序决定了在编译期间,javac寻找类的优先级;也决定了运行时(普通Java程序)寻找类的优先级。
Facet代表模块使用的框架、技术或者语言。一个模块可以添加多个Facet,使用某些Facet可能需要下载框架组件。
在IDEA中构件这一术语,可以指定两个不同却相关的事物:
- 构件可以指你期望从工程输出的内容的规则(specification)
- 构件可以指上述规则的实际产出
构件可以简单的是一个或者多个模块打包而成的JAR、WAR或者EAR,对于后两者,Web/Java EE Application的Facet相关的资源会一并打包到WAR/EAR中。你也可以生成自定义格式的构件。
简而言之,构件允许你把(一个或者多个模块)编译后的代码、关联的库、资源文件、元数据文件(例如Facet的部署描述符)等一并成一个可部署的单元。
构件还可以包含其它构件。
库是指在你的模块中以只读方式使用的、已编译的代码的集合。
库可以附带源码、API文档,这可以方便的进行Debug,或者在IDE中查看inline文档。
你可以定义三种级别的库:
库级别 | 说明 |
全局(IDE) | 这类库可以被任何工程使用,即它们可以被加入到任何工程的任何模块的依赖列表中 |
工程 | 这类库可以被工程内部所有模块使用 |
模块 | 这类库只能被单个模块使用 |
这类库允许你使用特定于某种JavaEE服务器/Servlet容器的类。每当你添加了一个应用程序定义后,IDEA会自动创建相应的应用服务器库:
为了减少在开发机器之间转移工程的复杂性,IDEA引入路径变量(path variables),路径变量指向一个目录/文件的绝对路径。当使用位于工程外部的第三方库时,路径变量特别有用。
在IDEA中Scope表示一组文件、包或者目录。使用Scope你可以得到一个过滤后的视图,用于关注于特定操作。对于大规模的工程来说,Scope特别有效。IDEA提供了一系列预定义的Scope,你还可以自定义Scope。
你可以在Project工具窗口中浏览Scope。
可以分为两类:
- Shared Scopes:可以供团队成员使用,存放在.idea/scopes目录或*.ipr中(这也是为什么工程元数据可能需要提交到VCS的原因)
- Local Scopes:自己本地使用
Scope | 说明 |
Project Files | 包含工程内容根目录下所有的文件,模块依赖一般不包含在其中 |
Problems | 工程内容根目录下存在错误的文件 |
Project | 包含Project Files以及所有模块依赖 |
Production | 类似于Project,但是排除测试相关的目录文件 |
Tests | Project中出去Production的部分 |
Changed Files | 修改后的文件 |
Open files | 在编辑器中打开的文件 |
Current file | 编辑器中当前显示的文件 |
Selected files | 当前被选中的文件(例如在Project工具窗口中) |
所谓编译,就是指把*.java源文件通过javac/eclipse/ajc等编译器处理,生成*.class文件。
所谓构建,是指编译源代码、拷贝资源文件,必要的情况下进行打包。
编译、构建的结果,总是存放在工程/模块的输出目录下,默认的输出目录为out,使用Maven时一般为target。
在IDEA的Build菜单下,有多个相似的菜单项,说明如下:
菜单项 | 说明 |
Make Project | 只编译修改过的文件,使用的最多,对于大型工程比Rebuild节约时间 |
Make Module ... | |
Compile ... | 强制编译单个文件,不管上次编译依赖是否修改过 |
Rebuild Project | 强制重新构建整个工程,默认的会在构建之前清空输出目录 |
Build Artifact | 创建构件,对于exploded类型的构件,仅仅是将散装的构件目录存放到输出目录中 在Tomcat中运行构件时,直接把上述构件目录作为Web应用的根目录 |
设置路径 | 说明 |
B,E,D ⇨ Compiler | 勾选Make project automatically,修改代码后IDEA会自动编译Java类 |
B,E,D ⇨ Build Tools ⇨ Maven | 取消勾选Always update snapshots,勾选会导致总去远程仓库下载 Maven home directory设置为/home/alex/JavaEE/maven/3.0.5 User settings file 设置为/home/alex/JavaEE/config/maven-settings.xml,勾选Override |
B,E,D ⇨ Build Tools ⇨ Maven ⇨ Importing | 勾选Import Maven projects automatically,保持Maven工程模型和IDEA工程模型之间的同步 勾选Automatically download Sources |
B,E,D ⇨ Build Tools ⇨ Maven ⇨ Repositories | 选中Remote Repository,执行Update操作 |
B,E,D ⇨ Application Servers | 配置应用服务器 |
下表列出的快捷键,全部基于Eclipse的Keymaps。
快捷键 | 说明 |
Ctrl + Shift + Alt + S | 打开工程结构对话框,可以进行工程、模块、依赖库等方面的设置 |
- File ⇨ New ⇨ Project,弹出New Project对话框
- 切换到Java Enterprise选项卡,选择合适的Java EE version。默认情况下是Java EE 7
- 切换到Java选项卡,选择合适的Project SDK。注意,这里可以添加JDK,以后的工程自动感知已添加的JDK
- 勾选Java EE ⇨ Web Application,Servlet规范的版本会显示在下面
- 下一步,给工程命名并指定目录位置,完成
工程src目录右击 ⇨ New ⇨ Servlet,创建任意一个Servlet,IDEA会触发错误提示,原因是没有找到Servlet API。
在代码中红色HttpServlet文字上Alt + Enter,Add Java EE 6 JARs to module dependencies。在弹出对话框中点选Download,然后点击Configure,参考喜下图设置:
确定后,IDEA会下载JavaEE库。这些库会在Project Structure的Platform Settings ⇨ Global Libraries中出现,并且被当前工程自动引用。Servlet中的报错会消失,JSP也可以获得代码自动完成提示了。
File ⇨ Project Structure,切换到Artifacts,配置“构件”(如果使用Maven或者Gradle等构建工具,则不需要在此配置)。参考下图:
默认的,IDEA已经生成一个构件——解包(exploded)部署的war。点击可以定义新的构件,构件类型包括JAR、WAR、EAR、JavaFx应用等等。
在右侧窗格,你可以修改构件的名称、输出目录。勾选Build on make,则在构建工程时,IDEA会自动生成此构件。
在下面的Output Layout选项卡中,可以定义构件包含的内容、目录结构:
- 在此选项卡的左侧,可以为构件添加目录、归档文件,或者添加工程组件的一个拷贝——例如模块的编译输出(Module Output)、目录和文件、JavaEE资源等
- 在此选项卡的右侧,可以双击,把某个元素添加到构件默认位置,或者拖拽到构件的任意位置。已经添加过的元素,不显示
File ⇨ Settings ⇨ B,E,D ⇨ Application Servers,点击可以配置新的服务器。IDEA支持绝大部分主流的JavaEE应用/Web服务器。
Run ⇨ Edit Configurations,点击创建新的运行/调试配置。以Tomcat为例,选择Tomcat Sever ⇨ Local。在右侧窗格顶部可以设置此配置的名称,例如“Tomcat v8.0 Server at localhost:8080”。右侧窗格有多个选项卡,可以分别进行配置:
选项卡 | 说明 |
Server |
选择先前配置过的Application Server,指定JVM参数,Tomcat端 On 'Update' action,指定Update操作(Ctrl + F10)的行为,对应Run/Debug工具窗口中的按钮 On frame deactivation可以指定当IDEA失去焦点(切换到其它程序)后执行的操作,对应Run/Debug工具窗口⇨Deployment选项卡中的按钮 配置参考图如下: |
Deployment | 指定服务器启动时需要部署的构件,对于War构件,可以为其指定一个Application Context,对应了URL |
Logs | 指定在Run/Debug工具窗口中显示哪些服务器日志(每个日志占据一个选项卡 ) |
Code Coverage | 进行代码覆盖率检查的配置 |
Startup/Connection | 指定Debug、Run或者Coverage时执行的命令行、JVM参数、环境变量 |
在选项卡的下面,还有一个Before launch配置,可以指定启动服务器之前需要执行的动作。
在工具栏上选择运行配置,然后点击右侧的按钮,IDEA将启动应用服务器(运行/调试模式)并且部署Web应用。
在运行期间,依据运行配置的On Update action、On frame deactivation设置,IDEA可能自动把更新后的类、资源文件同步到服务器。你可以在Application Servers工具窗口中查看服务器代码是不是最新的:
如果某个构件后面跟着[Republish],你可以点击按钮,将最新的代码同步到服务器。
当你从结构上更改一个类,比如修改了一个方法的签名,或者修改某个框架的配置文件,IDEA无法进行热部署,必须重启服务器。此时你可以借助JRebel插件。
参考:WebStorm智能提示
下载一个官方库后,IDEA会弹出一个对话框,你有机会将库添加为某个模块的依赖:
被添加JS库依赖的模块,可以在Project Structure ⇨ Modules对话框点选模块,然后在右侧Dependencies中看到此依赖:
遗憾的是,通过按钮你只能添加Java库,看不到JS库,这可能是个BUG。
自定义库在IDEA 2016.1下无法工作(你没有机会将其添加为模块依赖),可能是BUG 。
手工解决办法是,先添加好自定义库,然后修改相关模块的.iml文件,添加:
1 2 3 4 5 6 |
<!-- 添加类似下面的一行 --> <!-- name为你的自定义库的名称 --> <!-- 如果你的库的Type是Global则level设置为application,否则设置project --> <orderEntry type="library" name="ExtJS 4.1.1" level="application" /> </component> </module> |
修改完毕后立即生效。
IDEA没有工作区(Workspace)这一概念,这意味着你同时只能(在一个窗口)处理一个工程(Project)。在Eclipse中,你常常把若干个相互关联的工程在同一工作区中打开,在IDEA中你必须将它们组织为单个工程的多个模块。对于不相关的工程,建议在多个IDEA窗口中打开。
Eclipse和IDEA中重要术语的对应关系如下表:
Eclipse | IntellJ IDEA |
Workspace | Project |
Project | Module |
Facet | Facet |
Library | Library |
JRE | SDK |
Classpath variable | Path variable |
IDEA同样没有透视图(Perspective)的概念,这个特点和Visual Studio类似,但和Eclipse迥异。在Eclipse中你可以切换到不同的透视图,来完成相应的工作,IDEA则没有这个必要,IDEA会智能的管理工具窗口——类似于Eclipse中的视图(View),这些窗口会在和当前任务相关时显示。
你可以拖拽以重新排列工具窗口,或者设置其为浮动模式。通过Window ⇨ Store Current Layout as Default可以保存当前工具窗口的布局,对以后所有工程生效。
某些工具窗口可以和编辑器联动,在工具窗口标题上栏上点击右键:
- Autoscroll to Source:点击工具窗口中的条目后,编辑器自动切换到对应文件或者代码行
- Autoscroll from Source:切换编辑器或代码行后,自动选中工具窗口中匹配的条目
这两项功能默认都是关闭的。Scroll from Source可以通过按钮手工触发。
IDEA会自动保存修改后的文件,并且能够从Local History中撤销重构。你之前不停按Ctrl + S的习惯可以改改了。IDEA会在编译、关闭文件时、IDE失去焦点时自动存储文件到磁盘。你还可以在A & B ⇨ System Settings 中设置IDE空闲多长时间后自动保存。
默认情况下IDEA不会自动的编译代码。你可以开启自动编译,但是当有程序在运行时,自动编译不会执行,此时你必须Ctrl + F9强制编译。
Eclipse使用自己的编译器,而IDEA默认使用JDK中的javac。Eclispse编译器对错误更加容忍,有些时候允许运行不能通过编译的代码。要切换到Eclipse编译器,可以B,E,D ⇨ Compiler ⇨ Java Compiler,设置Use compiler。要允许执行无法编译的代码,需要在Run/Debug Configurations中把Make替换为Make, no error check
要执行类似于Eclipse的Quick fix(Ctrl + 1),可以Alt + Enter。
要自动生成构造器、Getter/Setter,可以Alt + Insert。
IDEA的自动完成功能更加智能化,也比较复杂,分为:基本自动完成、次要基本自动完成、智能完成、次要智能完成、语句补全。
按Ctrl + J 可以插入模板代码,按Ctrl + Alt + J可以用模板围绕选中代码。你可以在Editor ⇨ Live Templates添加自己的模板。
IDEA支持特别的Postfix自动完成,你可以在Editor ⇨ General ⇨ Postfix Completion中查看可用的Postfix模板。
前面提到过,即使你设置了自动编译,在程序运行时IDEA不会自动编译。这样代码就不会Auto reload,要自动重新载入改变的类,你需要:
- 对于普通Java程序:明确构建Ctrl + F9
- 对于服务器上的程序:通过Ctrl + F10更新服务器
目前Java领域流行的构建工具包括Maven、Gradle,IDEA对它们提供了良好的内置支持。
当你创建/导入一个Maven/Gradle工程后,可以自由的修改pom.xml、build.gradle。修改这些配置文件引发潜在的构建配置发生的改变必须最终同步到IDEA的工程模型中。当你在配置文件中声明WAR等构件时,IDEA会自动配置Project Structure ⇨ Artifacts下的IDEA构件。
要手工完成上述同步,可以在Maven/Gradle工具窗口中点击按钮。要启用自动化同步,可以:
- 对于Maven:B,E,D ⇨ Build Tools ⇨ Maven ⇨ Importing,勾选Import Maven projects automatically
- 对于Gradle:B,E,D ⇨ Build Tools ⇨ Gradle,勾选Use auto-import
注意:
- IDEA允许任何Maven Goal或者Gradle Task在“运行”之前执行(通过Run/Debug Configuration设置)
- 当在IDEA中执行编译、构建操作时,IDEA使用自己的构建流程。此流程一般会比较快,但是可能和Maven/Gradle构建的结果不一致,当不一致发生时,你可以使用Maven goal或者Gradle task代替IDEA的Make
在Maven Projects工具窗口,你可以右击生命周期阶段或者目标,并指定在Make/Rebuild/Run之前/后自动触发执行。
子目录/文件 | 说明 |
classes | IDEA的Make、Rebuild操作生成的产品Java类、资源文件目录 Maven相关goal生成的产品Java类、资源文件目录 |
test-classes | IDEA的Make、Rebuild操作生成的测试Java类、资源文件目录 Maven相关goal生成的测试Java类、资源文件目录 |
artifactid-version |
IDEA的Build Artifacts操作生成的artifactid:war explodeed构件的存放目录 注意:
|
artifactid-version.war | IDEA的Build Artifacts操作生成的artifactid:war构件 Maven相关goal生成的war,已经正确处理好overlay+excluded |
war/work | maven-war-plugin工作目录,存放参与overlay且尚未exclude的war包的所有文件 |
这是一个真实的、已经维护了多年的工程,由5个Maven工程组成,其中一个包含11个Maven模块。这些工程使用了AspectJ编译时织入、maven-war-plugin的overlay、Spring、Hibernate等框架或插件。
Create New Project ⇨ Empty Project,创建一个空白的容器工程:
这样的工程创建后,工程内容根目录中除了.idea目录外没有任何内容。打开此工程后,IDEA自动打开Project Structure对话框,提示添加模块。
为了便于管理,我们把工程牵涉到的模块(一系列Maven工程)从VCS签出,存放在新工程pems-trunk的根目录下。然后点击 ⇨ Import Module,选择从工程根目录导入,如下图:
点击OK,出现如下对话框:
选择Maven,点击Next。注:通过Maven Projects工具窗口中的进行导入,与此导入方式效果一样。
点击Next后,出现如下对话框:
设置如下:
- 勾选Search for projects recurively,以便递归的在子目录中查找Maven工程
- 勾选Keep project file in,指定一个位置(例如.idea目录,或者工程根目录),可以集中的存放*.iml文件,避免对纯Maven工程的污染
- 勾选Create IntelliJ IDEA modules for aggregator projects,为多模块Maven工程的每个模块分别创建IDEA模块
- 勾选Create module groups for multi-module Maven projects,自动为多模块Maven工程创建模块分组
点击下一步,选择合适的Maven profile,再次下一步,出现类似如下界面:
该界面列出所有待导入的Maven工程的列表,注意,对于多模块Maven工程,只有容器工程(packaging=pom)才会出现在此列表中。
点击Next,选择IDEA工程使用的Project SDK,保持和Maven工程的JDK版本要求一致,然后点击Finish完成导入。我多次尝试,设置Project SDK没有效果,必须手工到Project Structure ⇨ Project Settings ⇨ Project中设置,在这个工程中,需要设置Project SDK为1.6、Project language level为6。
导入完毕后,在Project工具窗口中,可以看到如下的IDEA模块(组):
可以看到,IDEA对pems、security-monitoring两个Maven工程创建了模块分组,包含模块配置的*.iml文件存放在IDEA工程的根目录下。
打开Project Structure ⇨ Modules,可以看到IDEA成功识别到工程使用了AspectJ,并且自动配置了AspectJ Facet:
最好在Settings ⇨ B,E,D ⇨ Java Compile设置一下IDEA的ajc的Command line parameters,和aspectj-maven-plugin保持一致,例如
1 |
-showWeaveInfo -XnoInline -outxml -Xlint:ignore -1.6 |
打开Project Structure ⇨ Artifacts,可以看到IDEA自动处理了Overlay:
打开Settings ⇨ B,E,D ⇨ Compiler ⇨ Java Compiler,可以看到编译器被设置为Ajc。尽管我们在pom.xml中并没有指定对aspectjtools的依赖,但是IDEA很聪明的猜测到了它的位置。
需要注意的是,IDEA完全是依据POM中的依赖列表来识别AspectJ和Overlay,与aspectj-maven-plugin、maven-war-plugin插件的配置无关。IDEA不会(像Eclipse的m2e Connector那样)识别这些插件进而改变IDEA工程模型
上面我们提到过,IDEA可以成功识别WAR的overlays,但是它却不支持maven-war-plugin的excludes规则:
1 2 3 4 5 6 7 8 9 10 11 |
<overlay> <groupId>com.kingsmartsi</groupId> <artifactId>pems-rpt</artifactId> <excludes> <exclude>WEB-INF/lib/sshe-utils-*.jar</exclude> <exclude>WEB-INF/lib/security-monitoring-core-*.jar</exclude> <exclude>WEB-INF/lib/comm-tools-*.jar</exclude> <exclude>WEB-INF/lib/commons-lang-*.jar</exclude> <exclude>WEB-INF/lib/commons-logging-*.jar</exclude> </excludes> </overlay> |
这导致本来需要排除掉的内容进入需要部署war构件,例如上面的pems-web-manager:war exploded。要解决此问题,你可以逐个修改参与overlay的war构件,将不需要的内容从它本身的输出列表中排除,例如:
排除掉某些JAR包后,IDEA会作为错误看待,并且显示在Project Structure 左侧面板的“Problems”中,构件上也被打上波浪线提示。要去除这些提示很简单,只需要把这些构件的Type改为“Other”即可:
你可能发现这种处理方式太过繁琐,下面有两种备选方案:
- 运行Tomcat前,调用maven-war-plugin插件的Goal生成pems-web-manager:war exploded构件的目录内容。这样就可以遵循excludes规则,后续的Build Artifacts操作也不会破坏此规则。默认的IDEA在启动Tomcat前自动执行Build Artifacts操作
- 不使用maven-war-plugin的overlay的excludes功能。以该工程为例,excludes的目的是排除掉低版本的commons-lang:1.0,这完全可以(也应当)用Maven传递性依赖排除机制来实现
这个比较奇葩,工程内有两个Hibernate实体类,引用了同一个 @AnyMetaDef(name="device") 注解。之前我们为了减少重复代码,让这两个类共享一个@AnyMetaDef,即:在其中一个类上定义@AnyMetaDef,另外一个类仅仅通过 @Any ( metaDef = "device" ) 引用。
现在的问题是,在Eclipse下部署到Tomcat,@AnyMetaDef必须定义在A类上;在IDEA下部署到Tomcat,@AnyMetaDef必须定义在B类上。否则就会报错:Unable to find @AnyMetaDef for an @(ManyTo)Any mapping ...
看样子和类的加载顺序有关系,而这两个类的加载顺序受运行环境的影响。
最简单的解决办法就是重复定义一个@AnyMetaDef并指定不一样的名字,由于@Any很少用到,这不会导致过分的维护压力。
当工程内包含大量JavaScript时,会验证增加IDEA分析代码的压力,此时你可以把不需要参与搜索、代码分析的:
- 目录 Mark Directory As ⇨ Excluded
- JS文件 Mark as Plain Text
但是要注意,Excluded的目录不会发布到Tomcat服务器,可能会导致404错误。
最好通过命令行来添加,通过IDEA的GUI添加可能出现问题,取决于项目的组织方式。
参考Web应用开发一节创建一个Tomcat服务器,把pems-web-manager:war exploded、sshe-static:war exploded两个构件添加到Run/Debug Configurations的Deployment选项卡,然后在Server选项卡设置合适的参数:
设置完毕后点击确定,在工具栏选择此Run/Debug Config,点击或即可启动Tomcat。
按照上图的配置,运行期间发生修改(或新添加)的类、资源文件会在切换到其它窗口后、Update操作后(Ctrl + F10)自动同步到Tomcat服务器,同步后IDEA会在Run/Debug工具窗口上方弹出类似下面的气泡提示:
应当使用Maven来打包,首先为所有顶级Maven工程创建Run/Debug Config,Command line可以设置为 clean install -Dmaven.test.skip=true ,然后创建一个额外的Confg调用它们。点击Before launch下面的 ⇨ Run Another Configuration,调用pems依赖的所有Maven工程的的打包命令:
IntelliJ IDEA本身的网络代理配置,不会影响到Maven命令的执行,因此,你需要配置Maven代理。参见:Maven知识集锦
IDEA不会拷贝构件到其它目录,直接使用out/target目录下构建好的目录或者war包。
以Maven工程为例,如果使用exploded构件,那么:
- 一般方式启动Tomcat:使用/target/artifactid-version/中的类和Web资源。目录artifactid-version由Build Artifacts动作生成
- JRebel方式启动Tomcat:使用/target/classes中的类、使用/src/main/webapp下的Web资源
如果你把资源文件存放在src/main/java下,那么删除这些资源文件后,exploded构件目录不会同步。放在src/main/resources下则没有此问题。
一直显示:loading archetype list,但是无法加载完毕。
解决办法:
- 尝试删除/home/alex/.IntelliJIdeaxxxx.xx/system/maven目录后重试
- 尝试修改Preferences ⇨ Build Tools ⇨ Maven ⇨ Importing,修改 VM options for importer 为-Xmx1024m后重试
例如和Spring联用时,调试注解了@Transactional的方法的时候,Debug工具窗口看不到本地变量的信息。
解决办法: Settings ⇨ B,E,D ⇨ Compiler ⇨ Java Compiler,设置Ajc Options / Command line parameters,添加 -preserveAllLocals
此外还有提示 'this' is not available的情况,可以改用 ajc$this代替this。
目前很多Docker的CLI选项Docker Integration插件不识别。手工编写的JSON file示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "HostConfig": { "NetworkMode": "local", "Dns": [ "172.21.0.1", "178.79.131.110", "223.6.6.6" ] }, "NetworkingConfig": { "EndpointsConfig": { "local": { "Gateway": "172.21.0.99" } } } } |
上面的例子示例了如何配置容器的网络参数,注意MAC、IP地址参考docker inspect的结果或者docker-java进行设置没有效果。
要使用yyyy-MM-dd HH:mm格式的时间,为Intellij提供环境变量
1 |
export LC_TIME=sv_SE |
Leave a Reply