工作以後我接觸到了maven分模塊的正確使用姿勢,我花了一整天想自己在idea上自己搭建一個架子,終於弄好了。
先說一下正確的使用姿勢。
service層應該是沒有啓動類,無法啓動的一些java文件。api模塊迭代更新,對外提供rpc的接口,啓動類應該寫在web模塊和rpc模塊,其中web提供controller,api迭代更新,安裝到maven倉庫裏面提供rpc的接口。common模塊寫一些工具類或者公共的bean。
我自己試了下,只想搭建一個service和web,只有這倆模塊成功了,別的也就是照貓畫虎。
一開始我創建父項目是springboot項目,子項目的parent指向父項目,靠,氣得我差點吐血。無論怎麼更改pom,加<mainClass>,加各種配置,然而不是打包不了,就是能打包但是啓動不了,說什麼找不到啓動類(那我就在你啓動類裏面運行的main方法他說找不到啓動類,吐了),或者能啓動但是訪問controller報錯404。
現在看來maven真的做的不夠好。唉,其實要是做的太好了,程序員也就該失業了,不知道是好事還是壞事。
不說了,跟着我做吧。
第一步,打開idea。
第二步,創建一個新的project,選擇spring initializar,輸入groupid和artifactId,注意,這裏選擇Type爲Maven POM
然後 next,勾選web,spring boot devtools等需要的包,選擇保存的額位置,finish。
第三步,右鍵剛剛生成的項目,new module,這時候我們創建空白的maven項目就行了
一直往下走,artifactId和modulename寫xxx-web(自己 起個名字就行,什麼模塊起什麼名字)。
第四步,重複第三步可以創建web,service,rpc,......所有模塊,在對應的main/java文件夾下創建com.xxx.xxx包後,rpc和web還要加上啓動類。
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } }
第五步,現在打開最外面那個pom,你會發現多了這個
這個時候,你還要在build標籤(沒有的話自己寫)裏面加上下面這些。
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.0.RELEASE</version> <configuration><!-- 指定該Main Class爲全局的唯一入口 --> <mainClass>com.mzg.jsoup.App</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal><!--可以把依賴的包都打包到生成的Jar包中--> </goals> <!--可以生成不含依賴包的不可執行Jar包--> <!-- configuration> <classifier>exec</classifier> </configuration> --> </execution> </executions> </plugin> </plugins>
因爲我們的web模塊是依賴service模塊的(contoller調用service的方法),所以要把Idea設置一下(之前沒設置所以一直運行不起來,就算再在Dependences裏面引入也不行,也install過service了。垃圾maven),如下:
選擇你要添加依賴的模塊,點擊加號
點擊加號後 選擇你要依賴的模塊,確定後就可以運行啦,這時候controller調service的方法就可以直接調用了。在你的web項目裏面寫個Controller,就可以啓動了。但是打包是有問題的。
於是我在web裏面加入了service依賴。
爲了打包還要在web模塊加入插件。
<build> <!-- 爲jar包取名 --> <finalName>jsoup-web</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.0.RELEASE</version> </plugin> </plugins> </build>
這裏注意兩點,一,mainClass寫你自己的啓動類
二,maven插件的版本必須使用1.3.0-REALEASE,樓主試了幾個別的新版本,打包的時候都報錯找不到你引用的類(可是運行是沒問題的,這就讓我很惱火)。咱也不知道maven插件升級是升了他ma什麼級,升了狗shi嗎?