ActFramework多模塊開發(fā)指南是什么

這篇文章給大家介紹Act Framework多模塊開發(fā)指南是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

我們擁有十多年網(wǎng)頁設(shè)計(jì)和網(wǎng)站建設(shè)經(jīng)驗(yàn),從網(wǎng)站策劃到網(wǎng)站制作,我們的網(wǎng)頁設(shè)計(jì)師為您提供的解決方案。為企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信開發(fā)、小程序開發(fā)、成都做手機(jī)網(wǎng)站H5建站、等業(yè)務(wù)。無論您有什么樣的網(wǎng)站設(shè)計(jì)或者設(shè)計(jì)方案要求,我們都將富于創(chuàng)造性的提供專業(yè)設(shè)計(jì)服務(wù)并滿足您的需求。

ActFramework 是一個Java的非輕量級全棧式MVC框架。和其他框架相比ActFramework的主要特點(diǎn)有:

  • 強(qiáng)大的參數(shù)綁定。 控制器方法可以綁定任何Java類型,包括基本類型,字符串,enum,數(shù)組,集合類型,Map類型和用戶自定義的POJO

  • 靈活的路由配置 - 支持注入和路由表配置

  • 符合JSR330標(biāo)準(zhǔn)的依賴注入

  • 內(nèi)置CSRF,XSS防護(hù)

  • 內(nèi)置CORS,支持SPA前后端分離

  • 功能完備的數(shù)據(jù)庫訪問層

  • 完整的RESTFul服務(wù)支持

  • 優(yōu)秀的運(yùn)行時性能

  • 支持不同運(yùn)行環(huán)境的配置

  • 支持多種模板引擎

  • 非Servlet框架, 容易開發(fā)和部署

  • 多種插件,包括MongoDB,Excel輸出,OAuth認(rèn)證,認(rèn)證/授權(quán)/記賬等

作為一個ActFramework的忠實(shí)粉,從Act 1.0版本開始,看到Act一步一步越來越完善,更加成熟。如果你想更快速的開發(fā)RESTFul的服務(wù),ActFramework不失為一個很好的選擇。

前面格林大神已經(jīng)分享了如何在ActFramework的世界邁出第一步,從無到有,搭建一個Act的工程,具體內(nèi)容可以參看這里。這篇博客得到很多小伙伴的一致好評,小伙伴并不滿足于初級使用,很多小伙伴通過各種方式,詢問了跟多關(guān)于Act的問題,其中一部分是關(guān)于如何創(chuàng)建多模塊的Act應(yīng)用和工程。今天,這里介紹的就是如何一步一步的搭建多模塊Act應(yīng)用和工程。

1. 構(gòu)架工程

我們首先構(gòu)架一個多模塊,多應(yīng)用的工程,主要滿足以下幾方面的功能。

  1. 發(fā)布的應(yīng)用應(yīng)該和內(nèi)部模塊獨(dú)立區(qū)分

  2. 應(yīng)用下面可能有多個獨(dú)立App

  3. 模塊下面根據(jù)功能不同,可能會有多個子模塊

所以,我們設(shè)計(jì)得結(jié)構(gòu)大概如下所示。

project
├─applications
│  ├─genji
│  ├─hanzo
│  └─nexus
└─modules
    ├─core
    ├─data
    └─ware

applications下面是將來會發(fā)布的獨(dú)立的三個應(yīng)用,genji,hanzo和nexus

modules是工程的內(nèi)部依賴的模塊,這些模塊可能會被應(yīng)用全部或者個別依賴。

有了工程大概的設(shè)計(jì)模型,我們下一步開始搭建工程

2. 搭建工程

搭建工程,實(shí)現(xiàn)以上架構(gòu)。這里用Maven做為管理工具。具體的POM可以見下面。

2.1 工程的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>

2.2 Application工程

Applications 工程下面有三個獨(dú)立的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下面包含三個獨(dú)立的應(yīng)用Genji,Hanzo和Nexus

2.2.1 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>

2.3 Modules 工程

Modules工程和Applications工程類似,唯一不同,Module下面的模塊發(fā)布出來是Jar包,只能被其它模塊或者應(yīng)用引用。

<?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下面的應(yīng)用一致,這里不再一一列舉。

3. ACT多模塊支持

看完前面的內(nèi)容,我們可以發(fā)現(xiàn),我們在Act里面的多模塊多應(yīng)用的工程基本和Spring的工程是看起來一樣的。的確Act支持標(biāo)準(zhǔn)的Maven構(gòu)架的工程,所以Act的多模塊和多應(yīng)用工程是標(biāo)準(zhǔn)的Maven多模塊工程。

3.1 IDEA 支持

既然是標(biāo)準(zhǔn)的Maven工程,所以我們把工程導(dǎo)入到Intellij IDEA,配置完對應(yīng)的IDEA的配置,IDEA是完全可以識別,沒有任何的問題。

既然IDEA能正確的識別Maven標(biāo)準(zhǔn)的多模塊應(yīng)用,那么大家的疑惑和問題在哪里呢?

大家的疑惑和問題主要是在我們啟用Act Application的時候,會失敗,IDEA會告訴你找不到對應(yīng)的引用的模塊。

這是為什么,怎么解決呢?

我們先來看看怎么解決在IDEA里面的正確的啟動多模塊引用的應(yīng)用。

3.1.1 配置支持

為解決在IDEA下面啟動和執(zhí)行Act多模塊的問題我們可以選擇在工程的配置文件中添加配置。

因?yàn)锳ct是支持多環(huán)境的,一般我們默認(rèn)在IDEA里面啟動是DEV,所以我們需要在Dev下面的配置中添加相關(guān)的配置。

這里我們還是以Neuxs工程的配置為例:

############################################
# Act multi-modules configuration for DEV
############################################

base=../../modules
modules=${base}/core;${base}/data;${base}/ware

配置的核心就是需要配置modules屬性,并指定該應(yīng)用引入的模塊的相對位置或者絕對位置,我們推薦使用相對位置。

3.2 運(yùn)行支持

剛才我們知道如何在IDEA里面支持Act的多模塊。那么我們發(fā)布出來的App應(yīng)用,在PROD環(huán)境下面怎么支持呢?是不是也把Prod下面的配置文件加上配置?

首先我們看到Act默認(rèn)發(fā)布的App是tar.gz的形式,tar.gz里面包含了我們的Act依賴和我們自己工程的依賴,并且在啟動是,會把lib下面的資源自動加載到運(yùn)行環(huán)境,所以我們不需要對Prod下面的配置文件做任何修改,Act Application在啟動時會自動發(fā)現(xiàn)放置于lib下面的依賴的包。

注意:

  1. 我們在定制多模塊應(yīng)用的時候,需要在POM中指明發(fā)布格式和引用,這樣我們發(fā)布出來的tar.gz才能正確的包含模塊下的Jar文件。

  2. 如果我們需要修改子模塊的資源文件,我們可以在POM文件中做相應(yīng)的設(shè)置和修改。例如:

<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>

4. 結(jié)束語

Java工程的多模塊多應(yīng)用是標(biāo)準(zhǔn)的Maven工程的設(shè)置,Act的工程發(fā)布出來,在生成環(huán)境是可以完美支持的。并不需要做特殊的修改。

為了支持開發(fā)模式下找到工程源文件來編譯,需要在對應(yīng)的Dev的配置中申明Modules配置。記住下面這個配置,Act多模塊多應(yīng)用不是難題。

modules=<path>/<module>;<path>/<module>;...

這里順便解釋下為什么IDEA下面需要配置Modules參數(shù),而Spring的工程不需要呢?這是因?yàn)镾pring在IDEA下面有專門的插件,插件告訴了IDEA在哪里去找各個Spring引入的模塊,但Act沒有IDEA的專門插件,所以我們只能在配置中申明一下,這樣開發(fā)模式就完全沒有問題了。

關(guān)于Act Framework多模塊開發(fā)指南是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)站欄目:ActFramework多模塊開發(fā)指南是什么
文章轉(zhuǎn)載:http://muchs.cn/article14/ijopge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、網(wǎng)站改版品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站