The Version 12 of IntelliJ comes with good enhancements and new features, such as the following:
JavaFX 2: Now it is possible to use code completion, navigation, refactoring, and CSS facilities in JavaFX 2 projects
Java 8: In this version, the next generation of the Java platform is fully supported with code assistance for the new syntax, such as Lambda expressions, type annotations, default methods, and method references
Android UI Designer: IntelliJ provides a full-featured UI Designer for Android; this way, you can build advanced layouts for Android mobile devices by simply dragging elements
Spring Frameworks: This framework was already supported, however, new improvements were made that bring performance enhancements and better code assistance for a wider range of Spring Frameworks, such as Security and Batch
Flex Flash and AIR: It provides support for Adobe Gaming SDK, including AIR SDK, Starling, Feathers, and Away3D
Drools Expert: The rule-based declarative language from JBoss has code assistance and refactoring tools available
Cloud Tools: You can deploy, run, and monitor your applications in Cloud Foundry and CloudBees
This dialog is used to configure the structure of the project and can be opened by clicking on the Project Structure button present in the main window or using the shortcut Ctrl + Alt + Shift + S (or command + ; in Mac). It's divided into the following five categories:
Project: This section is used to configure the general settings for the project, such as project name, the Java version used, the language level, and the path for the compiled output.
Modules: This module is a discrete elementary unit of the functionality which you can compile, run, test, and debug independently. In this section, you can configure settings that are specific to each module in the project, such as the dependencies, package's prefix, and paths.
Libraries: This section is used to manage the libraries used in the project. Even if the libraries are managed by an external tool, such as Maven, they can be managed in this category.
Facets: Facets represent various frameworks, technologies, and languages used in a module. Here, you can manage the facets of the module. This way, you can define if the support for a particular framework is enabled for it (for example, Spring). Once a facet is activated in a module, IntelliJ will provide facilities to work with that facet.
Artifacts: An artifact is a draft that defines the layout of the project output. It could be an archive (JAR, WAR, EAR) or a directory. In other words, an artifact defines what the final output of the project will be. In this section, you can configure the properties for the artifact of the project.
Perhaps someday you will notice that IntelliJ may be running slow; this may happen, for example, when your project has lots of classes. To avoid this, we could increase the available memory used by IntelliJ. Simply edit the file INTELLIJ_FOLDER/bin/idea.vmoptions (or INTELLIJ_FOLDER \bin\idea.exe.vmoptions on Windows). What you discover upon opening this file are the virtual machine options used to run IntelliJ; so, if you want to change other things related to Java VM, which executes IntelliJ, this is the place to do so.
The main window can be divided into seven parts as shown in the previous screenshot:
The main menu contains options that you can use to do tasks such as creating projects, refactoring, managing files in version control, and more.
The main toolbar element contains some essential options. Some buttons are shown or hidden depending on the configuration of the project; version control buttons are an example of this.
The Navigation Bar is sometimes a quick and good alternative to navigate easily and fast through the project files.
Tool tabs are shown on both sides of the screen and at the bottom of IntelliJ. They represent the tools that are available for the project. Some tabs are available only when facets are enabled in the project (e.g. the Persistence tab).
When the developer clicks on a tool tab, a window appears. These windows will present the project in different perspectives. The options available in each tool window will provide the developer with a wide range of development tasks.
The editor is where you can write your code; it will be better covered in the next section.
The Status Bar indicates the current IDE state and provides some options to manipulate the environment. For example, you can hide the tool tabs by clicking on the icon at the bottom-left of the window.
The editor area, as you probably know, is where you edit your source code.
The gutter area is where different types of information about the code is shown, simply using icons or special marks like breakpoints and ranges. The indicators used here aren't used to just display information; you can perform some actions depending on the indicator, such as reverting changes or navigating through the code.
The smart completion popup, as you've already seen, provides assistance to the developer in accordance with the current context.
The document tabs area is where the tabs of each opened document are available. The type of document is identified by an icon and the color in the name of the file shows its status in version control: blue stands for "modified", green for "new", red for "not in VCS", and black for "not changed". This component has a context menu that provides some other facilities as well.
The marker bar is positioned to the right-hand side of the IDE and its goal is to show the current status of the code. At the top, the square mark can be green for when your code is OK, yellow for warnings that are not critical, and red for compilation errors, respectively. Below the square situated on top of the IDE this element can have other colored marks used to help the developer go directly to the desired part of the code.
If you work with web projects using Java, you know that deploys and redeploys are a time-consuming task. Even a little modification in the code would make you lose a lot of time and things may get worse when you notice that your application server has crashed because of the big number of redeploys. I don't know about you, but I don't have time to lose.
JRebel is a commercial plugin that can solve this problem. With JRebel, you won't need to worry about redeploy because it can reload the changed classes on-the-fly, just clicking on the JRebel button added in the main tool bar once the plugin has been downloaded. The magic used by JRebel to reload objects is really powerful, but it can't perform miracles;
Sometimes, even with you knowing that better approaches exist, you will insist on using Backspace key to remove excess space between the sentences you created. In cases like this, you will be lucky if you've installed the Hungry Backspace plugin. The following screenshot shows an empty space that can be completely removed with just one press of the Backspace key: