您好,登錄后才能下訂單哦!
這篇文章給大家介紹Act Framework多模塊開發指南是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
ActFramework 是一個Java的非輕量級全棧式MVC框架。和其他框架相比ActFramework的主要特點有:
強大的參數綁定。 控制器方法可以綁定任何Java類型,包括基本類型,字符串,enum,數組,集合類型,Map類型和用戶自定義的POJO
靈活的路由配置 - 支持注入和路由表配置
符合JSR330標準的依賴注入
內置CSRF,XSS防護
內置CORS,支持SPA前后端分離
功能完備的數據庫訪問層
完整的RESTFul服務支持
優秀的運行時性能
支持不同運行環境的配置
支持多種模板引擎
非Servlet框架, 容易開發和部署
多種插件,包括mongodb,Excel輸出,OAuth認證,認證/授權/記賬等
作為一個ActFramework的忠實粉,從Act 1.0版本開始,看到Act一步一步越來越完善,更加成熟。如果你想更快速的開發RESTFul的服務,ActFramework不失為一個很好的選擇。
前面格林大神已經分享了如何在ActFramework的世界邁出第一步,從無到有,搭建一個Act的工程,具體內容可以參看這里。這篇博客得到很多小伙伴的一致好評,小伙伴并不滿足于初級使用,很多小伙伴通過各種方式,詢問了跟多關于Act的問題,其中一部分是關于如何創建多模塊的Act應用和工程。今天,這里介紹的就是如何一步一步的搭建多模塊Act應用和工程。
我們首先構架一個多模塊,多應用的工程,主要滿足以下幾方面的功能。
發布的應用應該和內部模塊獨立區分
應用下面可能有多個獨立App
模塊下面根據功能不同,可能會有多個子模塊
所以,我們設計得結構大概如下所示。
project ├─applications │ ├─genji │ ├─hanzo │ └─nexus └─modules ├─core ├─data └─ware
applications下面是將來會發布的獨立的三個應用,genji,hanzo和nexus
modules是工程的內部依賴的模塊,這些模塊可能會被應用全部或者個別依賴。
有了工程大概的設計模型,我們下一步開始搭建工程
搭建工程,實現以上架構。這里用Maven做為管理工具。具體的POM可以見下面。
<?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> <repositories> <repository> <id>sonatype-nexus-snapshots</id> <name>Sonatype Nexus Snapshots</name> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>sonatype-nexus-snapshots</id> <name>Sonatype Nexus Snapshots</name> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases> <enabled>false</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> </pluginRepositories> <parent> <groupId>org.actframework</groupId> <artifactId>act-starter-parent</artifactId> <version>1.8.19.0</version> </parent> <groupId>me.domall</groupId> <artifactId>domall</artifactId> <name>domall :: project</name> <packaging>pom</packaging> <version>1.0.1</version> <modules> <module>applications</module> <module>modules</module> </modules> <properties> <domall-core.version>1.0.1</domall-core.version> <domall-data.version>1.0.1</domall-data.version> <domall-ware.version>1.0.1</domall-ware.version> <mysql-connector.version>8.0.12</mysql-connector.version> <guava.version>27.0.1-jre</guava.version> <logback.version>1.2.3</logback.version> <junit.version>4.12</junit.version> <assertj.version>2.2.0</assertj.version> <maven-jar-plugin.version>3.1.0</maven-jar-plugin.version> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>${java.version}</source> <target>${java.version}</target> <debug>true</debug> <debuglevel>lines,vars,source</debuglevel> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <skipAssembly>true</skipAssembly> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </pluginManagement> </build> </project>
頂部工程比較核心的部分是申明下面會有2部分大模塊applications和modules
<modules> <module>applications</module> <module>modules</module> </modules>
Applications 工程下面有三個獨立的Application,這里僅以Nexus工程為例,其它類似。
<?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> <parent> <artifactId>domall</artifactId> <groupId>me.domall</groupId> <version>1.0.1</version> </parent> <artifactId>domall-applications</artifactId> <packaging>pom</packaging> <name>domall :: applications</name> <modules> <module>hanzo</module> <module>nexus</module> <module>genji</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>me.domall</groupId> <artifactId>domall-core</artifactId> <version>${domall-core.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>me.domall</groupId> <artifactId>domall-data</artifactId> <version>${domall-data.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>me.domall</groupId> <artifactId>domall-ware</artifactId> <version>${domall-ware.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act</artifactId> <version>${act.version}</version> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act-aaa</artifactId> <version>${act-aaa.version}</version> </dependency> </dependencies> </dependencyManagement> </project>
可以看到applications下面包含三個獨立的應用Genji,Hanzo和Nexus
工程的配置POM
<?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> <parent> <artifactId>domall-applications</artifactId> <groupId>me.domall</groupId> <version>1.0.1</version> </parent> <artifactId>domall-nexus</artifactId> <name>domall :: applications :: nexus</name> <properties> <app.entry>me.domall.nexus.Nexus</app.entry> </properties> <dependencies> <dependency> <groupId>me.domall</groupId> <artifactId>domall-core</artifactId> </dependency> <dependency> <groupId>me.domall</groupId> <artifactId>domall-data</artifactId> </dependency> <dependency> <groupId>me.domall</groupId> <artifactId>domall-ware</artifactId> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act</artifactId> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act-aaa</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> </plugins> </build> </project>
Modules工程和Applications工程類似,唯一不同,Module下面的模塊發布出來是Jar包,只能被其它模塊或者應用引用。
<?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> <parent> <artifactId>domall</artifactId> <groupId>me.domall</groupId> <version>1.0.1</version> </parent> <artifactId>domall-modules</artifactId> <packaging>pom</packaging> <name>domall :: modules</name> <modules> <module>core</module> <module>data</module> <module>ware</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>me.domall</groupId> <artifactId>domall-core</artifactId> <version>${domall-core.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>me.domall</groupId> <artifactId>domall-data</artifactId> <version>${domall-data.version}</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act-aaa</artifactId> <version>${act-aaa.version}</version> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act-morphia</artifactId> <version>${act-morphia.version}</version> </dependency> <dependency> <groupId>org.actframework</groupId> <artifactId>act-eclipselink</artifactId> <version>${act-eclipselink.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j-api.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.assertj</groupId> <artifactId>assertj-core</artifactId> <version>${assertj.version}</version> <scope>test</scope> </dependency> </dependencies> </dependencyManagement> </project>
Modules下面的子模塊和Applications下面的應用一致,這里不再一一列舉。
看完前面的內容,我們可以發現,我們在Act里面的多模塊多應用的工程基本和Spring的工程是看起來一樣的。的確Act支持標準的Maven構架的工程,所以Act的多模塊和多應用工程是標準的Maven多模塊工程。
既然是標準的Maven工程,所以我們把工程導入到Intellij IDEA,配置完對應的IDEA的配置,IDEA是完全可以識別,沒有任何的問題。
既然IDEA能正確的識別Maven標準的多模塊應用,那么大家的疑惑和問題在哪里呢?
大家的疑惑和問題主要是在我們啟用Act Application的時候,會失敗,IDEA會告訴你找不到對應的引用的模塊。
這是為什么,怎么解決呢?
我們先來看看怎么解決在IDEA里面的正確的啟動多模塊引用的應用。
為解決在IDEA下面啟動和執行Act多模塊的問題我們可以選擇在工程的配置文件中添加配置。
因為Act是支持多環境的,一般我們默認在IDEA里面啟動是DEV,所以我們需要在Dev下面的配置中添加相關的配置。
這里我們還是以Neuxs工程的配置為例:
############################################ # Act multi-modules configuration for DEV ############################################ base=../../modules modules=${base}/core;${base}/data;${base}/ware
配置的核心就是需要配置modules屬性,并指定該應用引入的模塊的相對位置或者絕對位置,我們推薦使用相對位置。
剛才我們知道如何在IDEA里面支持Act的多模塊。那么我們發布出來的App應用,在PROD環境下面怎么支持呢?是不是也把Prod下面的配置文件加上配置?
首先我們看到Act默認發布的App是tar.gz的形式,tar.gz里面包含了我們的Act依賴和我們自己工程的依賴,并且在啟動是,會把lib下面的資源自動加載到運行環境,所以我們不需要對Prod下面的配置文件做任何修改,Act Application在啟動時會自動發現放置于lib下面的依賴的包。
注意:
我們在定制多模塊應用的時候,需要在POM中指明發布格式和引用,這樣我們發布出來的tar.gz才能正確的包含模塊下的Jar文件。
如果我們需要修改子模塊的資源文件,我們可以在POM文件中做相應的設置和修改。例如:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <skip>false</skip> <outputDirectory>${project.build.outputDirectory}</outputDirectory> <resources> <resource> <directory>${project.parent.parent.basedir}/modules/core/src/main/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>${project.parent.parent.basedir}/modules/data/src/main/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>false</filtering> </resource> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/.version</include> </includes> </resource> </resources> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <skipAssembly>false</skipAssembly> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <skip>false</skip> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>${maven-jar-plugin.version}</version> <configuration> <includes> <include>me/**</include> </includes> </configuration> </plugin>
Java工程的多模塊多應用是標準的Maven工程的設置,Act的工程發布出來,在生成環境是可以完美支持的。并不需要做特殊的修改。
為了支持開發模式下找到工程源文件來編譯,需要在對應的Dev的配置中申明Modules配置。記住下面這個配置,Act多模塊多應用不是難題。
modules=<path>/<module>;<path>/<module>;...
這里順便解釋下為什么IDEA下面需要配置Modules參數,而Spring的工程不需要呢?這是因為Spring在IDEA下面有專門的插件,插件告訴了IDEA在哪里去找各個Spring引入的模塊,但Act沒有IDEA的專門插件,所以我們只能在配置中申明一下,這樣開發模式就完全沒有問題了。
關于Act Framework多模塊開發指南是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。