Act Framework多模块开发指南是什么

技术Act Framework多模块开发指南是什么这篇文章给大家介绍Act Framework多模块开发指南是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ActFramework 是一个Jav

本文向您介绍什么是Act框架多模块开发指南。内容非常详细。感兴趣的朋友可以参考一下,希望对你有所帮助。

ActFramework是一个Java非轻量级全栈MVC框架。与其他框架相比,ActFramework的主要特点是:

的强大参数绑定。控制器可以绑定任何Java类型,包括基本类型、字符串、枚举、数组、集合类型、映射类型和用户定义的POJO。

灵活的路由配置-支持注入和路由表配置。

符合JSR330标准的依赖注入。

内置CSRF、XSS保护。

内置CORS,支持SPA前后分离。

功能齐全的数据库访问层。

完整的RESTFul服务支持。

出色的运行时性能。

支持不同操作环境的配置。

支持多个模板引擎。

非Servlet框架,易于开发和部署。

各种插件,包括mongodb、Excel输出、OAuth认证、认证/授权/记账等。

作为ActFramework的忠实粉丝,从Act 1.0可以看出,Act正在一步步变得越来越完善和成熟。如果你想更快地开发RESTFul服务,ActFramework是一个不错的选择。

过去,大神格林曾分享过如何在ActFramework的世界里迈出第一步,从零开始构建一个Act项目。详见此处。这个博客受到了很多朋友的好评,他们对初级使用并不满意。很多朋友以各种方式问了很多关于Act的问题,有些是关于如何创建多模块的Act应用和项目。今天,这里介绍的是如何一步步构建多模块Act应用和工程。

1. 构架工程

我们首先构建了一个多模块多应用的项目,主要满足以下功能。

发布的应用程序应该独立于内部模块。

应用程序下面可能有多个独立的应用程序。

根据不同的功能,以下模块可能有多个子模块。

因此,我们设计的结构大致如下。

项目

applications

genji

hanzo

nexus

modules

core

data

wareapplications这里有三个独立的应用程序将在未来发布,源氏,半藏和nexus。

模块是项目的内部依赖模块,可能完全或单独依赖于应用程序。

有了项目的总体设计模型,接下来我们就要开始搭建项目了。

00-1010建设项目实现上述结构。Maven在这里被用作管理工具。具体聚甲醛见下文。

2. 搭建工程

?xmlversion='1.0 '编码='UTF-8 '?

project xmlns=' http://aven . Apache . org/POM/4 . 0 . 0 '

xmlns : xsi=' http://www . w3 . org/2001/XMLSchema-instance '

xsi : schema location=' http://aven . Apache . org/POM/4 . 0 . 0http://aven . Apache . org/xsd/maven-4 . 0 . 0 . xsd '

模型版本4 . 0 . 0/模型版本

仓库

仓库

idsonatype-nexus-快照/id

nbsp;        <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 工程下面有三个独立的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

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下面的模块发布出来是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下面的应用一致,这里不再一一列举。

3. ACT多模块支持

看完前面的内容,我们可以发现,我们在Act里面的多模块多应用的工程基本和Spring的工程是看起来一样的。的确Act支持标准的Maven构架的工程,所以Act的多模块和多应用工程是标准的Maven多模块工程。

3.1 IDEA 支持

既然是标准的Maven工程,所以我们把工程导入到Intellij IDEA,配置完对应的IDEA的配置,IDEA是完全可以识别,没有任何的问题。

既然IDEA能正确的识别Maven标准的多模块应用,那么大家的疑惑和问题在哪里呢?

大家的疑惑和问题主要是在我们启用Act Application的时候,会失败,IDEA会告诉你找不到对应的引用的模块。

这是为什么,怎么解决呢?

我们先来看看怎么解决在IDEA里面的正确的启动多模块引用的应用。

3.1.1 配置支持

为解决在IDEA下面启动和执行Act多模块的问题我们可以选择在工程的配置文件中添加配置。

因为Act是支持多环境的,一般我们默认在IDEA里面启动是DEV,所以我们需要在Dev下面的配置中添加相关的配置。

这里我们还是以Neuxs工程的配置为例:

############################################
# Act multi-modules configuration for DEV
############################################
base=../../modules
modules=${base}/core;${base}/data;${base}/ware

配置的核心就是需要配置modules属性,并指定该应用引入的模块的相对位置或者绝对位置,我们推荐使用相对位置。

3.2 运行支持

刚才我们知道如何在IDEA里面支持Act的多模块。那么我们发布出来的App应用,在PROD环境下面怎么支持呢?是不是也把Prod下面的配置文件加上配置?

首先我们看到Act默认发布的App是tar.gz的形式,tar.gz里面包含了我们的Act依赖和我们自己工程的依赖,并且在启动是,会把lib下面的资源自动加载到运行环境,所以我们不需要对Prod下面的配置文件做任何修改,Act Application在启动时会自动发现放置于lib下面的依赖的包。

注意:

  1. 我们在定制多模块应用的时候,需要在POM中指明发布格式和引用,这样我们发布出来的tar.gz才能正确的包含模块下的Jar文件。

  2. 如果我们需要修改子模块的资源文件,我们可以在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>

4. 结束语

Java工程的多模块多应用是标准的Maven工程的设置,Act的工程发布出来,在生成环境是可以完美支持的。并不需要做特殊的修改。

为了支持开发模式下找到工程源文件来编译,需要在对应的Dev的配置中申明Modules配置。记住下面这个配置,Act多模块多应用不是难题。

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

这里顺便解释下为什么IDEA下面需要配置Modules参数,而Spring的工程不需要呢?这是因为Spring在IDEA下面有专门的插件,插件告诉了IDEA在哪里去找各个Spring引入的模块,但Act没有IDEA的专门插件,所以我们只能在配置中申明一下,这样开发模式就完全没有问题了。

关于Act Framework多模块开发指南是什么就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/37102.html

(0)

相关推荐

  • 三戒是哪三戒,柳宗元的\”三戒\”是什么?

    技术三戒是哪三戒,柳宗元的\三戒\是什么?柳宗元的《三戒》包括《临江之麋》三戒是哪三戒、《永某氏之鼠》和 《黔之驴》 这一组三篇寓言,是作者贬谪永州时所写。题名“三戒”,可能是取《论语》“君子有三戒”之意。文前的小序,已

    生活 2021年10月22日
  • python中的list是什么意思(python中list用法)

    技术Python中的List怎么用这篇文章主要为大家展示了“Python中的List怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中的List怎么用”这篇文

    攻略 2021年12月19日
  • sql语句有哪些优化(sql语句性能如何优化)

    技术SQL语句怎样优化这篇文章主要介绍了SQL语句怎样优化,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。(1) 选择最有效率的表名顺序 (只在基于规则的优

    攻略 2021年12月14日
  • Python列表的定义及使用方法是什么

    技术Python列表的定义及使用方法是什么这篇文章主要介绍“Python列表的定义及使用方法是什么”,在日常操作中,相信很多人在Python列表的定义及使用方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

    攻略 2021年11月1日
  • 什么是大陆架,什么是大陆架划界的公平原则

    技术什么是大陆架,什么是大陆架划界的公平原则大陆架划界的公平原则是划界的基础公平原则要求在划界中不仅必须采用公平的划界方法,而且必须达成公平的划界结果。具体要求是什么是大陆架:第一,参与划界各方必须有协议。这是一般国际法

    生活 2021年10月24日
  • 如何理解DIV中display和visibility属性差别

    技术如何理解DIV中display和visibility属性差别如何理解DIV中display和visibility属性差别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到

    攻略 2021年11月17日