創建普通 Java 項目
1、首次新建一個項目
如果是首次使用,在這個界面可以點擊 Create New Project ,創建一個新項目。
選擇Java,然后選好 JDK 的位置,接着點擊下一步 Next。
接下來不選擇模板創建,直接點下一步,然后填寫上項目名和項目保存的地址。
會提示目錄不存在,直接點擊OK創建。
這樣一個Java 項目就建好了。
2、再次新建一個項目
如果想要再次新建一個項目,可以在 File ---> New ---> Project... 打開了新建項目的窗口,選擇相應的項目,不過第二次就不需要選擇JDK了,IDEA已經為你默認選擇了上次的JDK。
選擇新建后,接着會提示你新項目是要在當前窗口顯示還是新開一個窗口顯示,如果選擇當前窗口顯示,就會覆蓋當前項目,因為IDEA一個窗口只顯示一個項目。
3、再次打開一個項目
(1)如果想要再次打開一個項目,可以 File ---> Open... 然后選擇你的項目,直接打開就行。
(2)也可以選擇 File---> Open Recent ,選擇打開一個最近打開過的項目。
界面按鈕功能說明
1、運行代碼按鈕
比如寫了個main方法,運行的話直接點擊左邊的綠色三角標志:
可以選擇直接運行,也可以Debug運行,還可以對代碼覆蓋率進行測試(第三項這個不是太明白)。
2、側邊欄各功能窗口的開關控制
IDEA 界面左下角有一個控制各個界面開關的按鈕
這個按鈕點擊可以控制各個側邊欄的開關,側邊欄里面有各個窗口的名稱和對應的數字,使用 ALT + 數字 就能實現相應窗口的開關。
比如
或者鼠標直接放該按鈕上去可以看到相應的窗口列表,點擊也可進行相應窗口的開關操作。
3、項目窗口里的四個按鈕
(1)修改項目包結構
通過Project窗口的一個小齒輪,可以選擇是否隱藏空包來控制空包的合並顯示還是展開顯示。
類似於eclipse中的這個功能。
(2)顯示項目中文件位置
這個按鈕能顯示當前類或者文件在項目結構中的位置。類似於eclipse中的
(3)收起項目結構
(4)收起項目窗口
創建 Java Web 項目
File ---> New ---> Project... 打開了新建項目的窗口。
通過 Java 或者 Java Enterprise 都可以創建 Java Web 項目。如下圖所示:
填寫上你的項目名稱就可以了。
接着會提示你新項目是要在當前窗口顯示還是新開一個窗口顯示,同樣選擇新開一個窗口。
建好后的項目結構:
配置 Tomcat 服務器
有兩個地方可以配置,如下圖所示:
接下來點擊 + 號,新建一個 本地的 Tomcat。
上圖說的熱部署只是靜態資源的熱部署,jsp之類的,如果想要修改class也實現熱部署,需要把那兩個選項設置為:“Update classes and resources”,不過不建議這么做,改動太頻繁的話部署會出問題。
Application server 的 Configure 如下圖所示:
接着設置部署的項目,在 Deployment 中點擊 + 號,然后點擊 Artifact... ,添加項目。
注意:Application context 選項為上下文根目錄,也就是訪問的時候的根目錄,一般這里可以設置成 / ,這樣訪問的時候就不需要帶上項目名(也就是這里指定的java_web_01_war_exploded)了。
接下來就會在 Application Servers 的窗口中看到配置好的 tomcat 以及部署好的項目。左側的兩個綠色的按鈕分別是啟動和DeBug啟動。
接下來啟動一下,啟動成功,如下圖所示:
如果部署出錯,可以檢查下Tomcat日志,級別默認是waring,修改成all就能看到所有日志了。
訪問路徑:http://localhost:8080/java_web_01_war_exploded/
自動會訪問 index.jsp。
創建 Maven 項目
同樣也是 File ---> New ---> Project... 打開了新建項目的窗口。
這里我們還是通過模板快速創建 Maven 項目,和 eclipse 的類似。
接下來我們填寫好圖中所示的三項內容。其中 ArtifactId 是坐標地址,一般默認是項目名。
接下來是選擇maven,可以使用idea自帶的,也可以使用我們自己安裝的,一般都是使用我們自己安裝的maven。
這里填好項目名,和上面的 ArtifactId 相比上了一個“-”,一般要設置相同,可以自己修改下。
接下來還是會詢問你新項目是要在當前窗口顯示還是新開一個窗口顯示,同樣選擇新開一個窗口。
接下來Idea會給我們按照模板創建 maven 項目,同時右下角會有一個小彈窗。我們選擇自動導入。
建好后的maven項目結構如下所示:
這時候會發現缺少resources目錄,main 右鍵添加 Directory ,添加 resources 目錄。
添加完后需要在 resources 上右鍵,選擇將該目錄作為資源根目錄。
test 目錄同樣操作添加 resources 目錄,然后指定該目錄為測試資源的根目錄。
都完成后項目結構是這樣的:
可以在右側邊框中找到 Maven ,點擊可以打開窗口,里面有一些maven命令,可以執行相應的操作。
還可以在 DEpendencise 中查看依賴的包。
clean:清除target下的內容
validate:
compile:編譯
test:測試
package:打包
verify:
install:
將當前項目打包發布到maven庫,比如把maven-01項目發布到maven庫,則其他項目就能依賴該項目了,例如可以直接通過在maven-02的pom中添加下面依賴,則就能在maven-02中調用maven-01中的方法了。
<dependency> <groupId>com.test.maven</groupId> <artifactId>maven-01</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
同時可在依賴項中看到該包
site:
deploy:
創建 Junit 測試
(1)新建一個類
package com.test.maven; public class Beat { public String getStr() { return "www"; } }
在該類中方法上使用 Ctrl + Shift + T 打開測試小窗口。創建一個新的測試。
寫上測試類的類名。
就在測試目錄里生成了測試類,
package com.test.maven; import org.junit.Test; import static org.junit.Assert.*; public class BeatTest { @Test public void getStr() { } }
完整的測試類代碼:
package com.test.maven; import org.junit.Test; import static org.junit.Assert.*; public class BeatTest { @Test public void getStr() { Beat beat = new Beat(); String str1 = beat.getStr();//實際值 String str2 = "ccc";//期望值 assertEquals(str1, str2);//斷言 } }
執行該測試代碼,可以使用 junit 執行,也可以使用 maven 提供的 test 命令執行。
(2)下面是 junit 的測試結果,可以看出,代碼執行結果出錯了。
(3)下面是maven的test命令執行結果。
(4)完整項目結構:
(5)該項目的pom.xml,idea 自動生成的,我沒進行修改:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.maven</groupId> <artifactId>maven-01</artifactId> <version>1.0-SNAPSHOT</version> <name>maven-01</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> </build> </project>
可以把多余的東西都刪除了,方便配置自己的東西:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.maven</groupId> <artifactId>maven-01</artifactId> <version>1.0-SNAPSHOT</version> </project>
創建maven web項目
不同之處是這里選擇原型項目時選這個。
建完項目之后修改pom文件,刪除不用的內容,注意留下一個war包設置,這里和上面普通maven項目的pom不一樣。會發現多了個<packaging>war</packaging>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.maven</groupId> <artifactId>maven-03</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> </project>
接着和上面一樣,補全目錄結構,在main和test下面分別添加缺少的java和resources目錄,然后還需要修改下web.xml的版本。
這樣就差不多了。
為了將編譯環境修改為指定java版本,需要添加編譯插件,修改完的pom如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.maven</groupId> <artifactId>maven-03</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!--編譯插件--> <plugin> <artifactId>maven-compiler-plugin</artifactId> <!--插件版本--> <version>3.8.0</version> <!--編譯級別--> <configuration> <source>1.8</source> <target>1.8</target> <!--編碼格式--> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build> </project>
最終的項目結構:
多模塊管理創建項目
使用idea創建項目,每創建一個就需要打開一個窗口,如果項目多了很不方便,打開的窗口太多,不好切換。
所以idea還有一種模式,類似於eclipse的那種,一個窗口顯示多個項目。不過idea叫做創建module。
先創建一個空項目,類似於eclipse的一個工作空間,然后在這個空項目(打開的窗口中)創建module,和創建項目的過程一模一樣。
然后打開新窗口,在新窗口中創建Module,過程和之前創建項目的過程一模一樣,不做重復了。
Maven工程的父子繼承
新建一個module(注意是maven java項目),作為父項目。修改pom文件,然后把java目錄和test目錄都刪除,只留一個pom.xml文件(父項目只有個pom)。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wkcto.maven</groupId> <artifactId>maven-01</artifactId> <version>1.0.0</version> <!--Maven父工程的packaging標簽值必須為pom--> <packaging>pom</packaging> </project>
然后再新建一個module(注意是maven java項目,並且名稱不要和父項目重復):
建完之后會發現子項目的pom是這樣的:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--當前子工程的父工程--> <parent> <artifactId>maven-01</artifactId> <groupId>com.wkcto.maven</groupId> <version>1.0.0</version> <relativePath>../maven-01/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>maven-java-01</artifactId> </project>
然后同樣方法再新建一個module(注意是maven web項目,並且名稱不要和父項目重復),pom如下,多了個war包:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>maven-01</artifactId> <groupId>com.wkcto.maven</groupId> <version>1.0.0</version> <relativePath>../maven-01/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>maven-web-01</artifactId> <packaging>war</packaging> </project>
最后modules結構如下:
子工程繼承父工程的pom文件后,會無條件的繼承父工程的依賴。也會無條件繼承父工程的插件。
這樣就會導致一個問題,那就是會把一些無用的包繼承過來,增加了部署風險。
所以增加了一個<dependencyManagement>標簽,用於管理依賴,這時在子項目pom中只需要依賴相應的包,不需要寫版本號了,版本號直接繼承自父項目。也就是相當於父項目只管理了版本號。當然,子項目中也可以定義自己依賴包的版本號,會直接覆蓋父項目中定義的該依賴包的版本號。
父項目最后pom結構示例如下,可參考:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.wkcto.maven</groupId> <artifactId>maven-01</artifactId> <version>1.0.0</version> <!--Maven父工程的packaging標簽值必須為pom--> <packaging>pom</packaging> <properties> <!--自定義標簽來描述依賴的版本號--> <junit-versition>4.11</junit-versition> <mysql.versition>5.1.38</mysql.versition> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit-versition}</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.versition}</version> </dependency> </dependencies> </dependencyManagement> </project>
子項目pom:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <!--當前子工程的父工程--> <parent> <artifactId>maven-01</artifactId> <groupId>com.wkcto.maven</groupId> <version>1.0.0</version> <relativePath>../maven-01/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>maven-java-01</artifactId> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <!--默認繼承的是父工程的版本號,當然也可以自己定義--> </dependency> </dependencies> </project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>maven-01</artifactId> <groupId>com.wkcto.maven</groupId> <version>1.0.0</version> <relativePath>../maven-01/pom.xml</relativePath> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>maven-web-01</artifactId> <packaging>war</packaging> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <!--默認繼承的是父工程的版本號,當然也可以自己定義--> </dependency> </dependencies> </project>
IDEA中SpringBoot項目使用熱部署插件
首先在pom中引入插件依賴
<!-- SpringBoot開發自動熱部署插件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
之后項目啟動狀態下做完修改后,直接選中項目,點擊Build,選中項目選項(為的是進行全局編譯),項目就會重啟的。
IDEA中修改代碼警告級別
比如在 Service 中注入一個 Mapper,IDEA工具自己檢查會顯示紅色錯誤提示:
但是這並不是個錯誤,只是工具自己的校驗提示找不到這個bean,其實不影響程序運行,為了美觀一點,我們可以修改下這里的警告級別。
點左邊的紅色燈泡,下拉選擇第一項,然后再選第一項,如圖所示:
可以把這處錯誤修改成警告:
IDEA中添加序列化ID
File ----- Setting 中的檢查項設置 Inspections,然后在右側窗口找到Java下的 Serialization issues,對其中的 Serializable class without 'serialVersionUID' 選項打上對勾,設置為警告。
然后就能看到序列化的類會提示沒有序列化ID,可以自動生成
選中類名,Alt + Enter 添加序列化ID。
添加成功。