这篇文章给大家介绍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多模块开发指南是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/3341803/blog/3073241