【開發筆記】Maven 初始化 Java 專案
不知道哪款整合開發工具是各位偏好用來編寫 JAVA 程式碼的主力選擇。如果同時開發 Android App 的時候,通常 Android Studio 會是我的首選。相反在沒有 Android Studio 的情況,剩下的 Eclipse 總讓人想到就覺得肚子疼...
雖然是老牌工具
Eclipse 真是歷史久遠的整合開發環境,雖然有很多小技巧可以改善整個人機介面互動上的反應速度。但是筆者幾年下來的主觀使用感受,相較於其他的開發工具,Eclipse 在卡頓,編譯時間,設置難度上,都算是相當不友好,學習曲線較陡的開發工具。
只是想寫幾行程式碼
總會有這樣的時候,只是想新建一個專案,寫上個幾行程式碼。然後很快的編輯,編譯,輸出終端結果。除了安裝耗時,肥大臃腫的開發工具。有沒有其他更便捷快速的選擇呢?其實是有的,幾個步驟就能達成。
安裝 Java
在這裡是以安裝 Java 11 為例子,如果是 macOS 環境下,使用 brew 會簡單一些。指令 brew search java
會列出可以安裝的套件。這裡選擇了 java11
。
brew update
brew search java
brew install java11
如果是 ubuntu 環境下,安裝默認的 JRE 最簡單
apt install default-jre
安裝 Maven
接下來是安裝 Maven。Maven 是用來作為專案管理及自動構建新專案的工具。一樣建議 macOS 環境使用 brew。
brew search maven
brew install maven
而 ubuntu 環境使用 apt 來安裝。
apt update
apt install maven
透過 Maven 新增一個專案
JRE 和 Maven 專案工具備齊,就可以立即開始了。指令很簡單如下:
mvn archetype:generate -DgroupId=com.coldyam.mq -DartifactId=mq-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
通常只需要自訂 groupId 和 artifactId 就可以了。
- groupId 影響程式碼路徑。
- artifactId 決定檔案夾名稱。
編譯套件
編譯上也很簡單
mvn package
不過各位可能會發現 JRE 版本需要指定 JDK 7 以後的編譯錯誤如下:
...
Source option 5 is no longer supported. Use 7 or later.
Target option 5 is no longer supported. Use 7 or later.
...
這時候需要修改 pom.xml 加上 <build>...</build>
如下
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
</plugins>
</build>
執行 jar
編譯成功後,會在 target 目錄下看到生成的 jar。這時候,還需要針對路徑做一些配置才能正確執行 jar。
jar tvf target/mq-project-1.0-SNAPSHOT.jar
java -cp target/mq-project-1.0-SNAPSHOT.jar com.coldyam.mq.App
編譯引入依賴執行的程式庫
不過這樣子的執行實在很沒有效率,也不是普遍期待的輸出形式。因此,更理想的編譯方式,應該要把依賴執行的程式庫一起也包括進來,類似靜態編譯,讓 jar 可以單獨執行。
所需要針對 pom.xml 再進行一點修改,加上 <build>...</build>
兩則 plugin 設置。
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.coldyam.mq.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
然後編譯的指令稍微修改如下:
mvn clean compile assembly:single
如此一來,target 中的 jar 就可以立即執行了。
java -jar target/mq-project-1.0-SNAPSHOT.jar