- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章构建Maven多模块项目的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
JavaWeb开发一般都会进行分层开发,通常分为 。
分层后,各层职责明确,后期维护起来也会容易一些。接下来我们就是使用Maven来构建以上各层,即构建一个Maven多模块项目,项目目录结构如下所示.
执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,得到一个新项目.
接下来作如下处理:
<packaging>标签在没有指明的情况下默认是jar,这里将其修改为pom,表示模块是一个可以被继承的模块.
进入demo目录,执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=model -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,在demo目录下生成了model目录,model目录里包含了src目录和pom.xml文件.
且demo/pom.xml里自动新增了以下内容, 。
1
2
3
|
<modules>
<module>model</module>
</modules>
|
接下来做如下处理: 修改model/pom.xml文件 。
<groupId>com.jepcc.app</groupId>
和<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
在demo目录下,执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=dao -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,在demo目录下生成了dao目录,dao目录里包含了src目录和pom.xml.
且demo/pom.xml里自动新增了内容,如下, 。
1
2
3
4
|
<modules>
<module>model</module>
<module>dao</module>
</modules>
|
接下来做如下处理:
修改 dao/pom.xml 。
删除<groupId>com.jepcc.app</groupId>和<version>1.0-SNAPSHOT</version> 因为groupId和version会继承自父模块的groupId和version.
增加<packaging>jar</packaging> 将打包方式设置为jar。增加依赖 增加对model模块的依赖 。
1
2
3
4
5
|
<dependency>
<groupId>com.jepcc.app</groupId>
<artifactId>model</artifactId>
<version>${project.version}</version>
</dependency>
|
在demo目录下,执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=service -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4,在demo目录下生成service目录,service目录里包含src目录和pom.xml文件.
且demo/pom.xml文件自动新增内容,如下, 。
1
2
3
4
5
|
<modules>
<module>model</module>
<module>dao</module>
<module>service</module>
</modules>
|
接下来作如下处理:
修改 service/pom.xml 。
删除<groupId>com.jepcc.app</groupId>和<version>1.0-SNAPSHOT</version> 因为groupId和version会继承自父模块的groupId和version.
增加<packaging>jar</packaging> 将打包方式设置为jar.
增加依赖 service 层依赖dao层和model层,但我们只需要添加dao层,因为dao模块中已经添加了对model模块的依赖.
1
2
3
4
5
|
<dependency>
<groupId>com.jepcc.app</groupId>
<artifactId>dao</artifactId>
<version>${project.version}</version>
</dependency>
|
在demo目录下执行命令:mvn -B archetype:generate -DgroupId=com.jepcc.app -DartifactId=web -DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4,在demo目录下生成web目录,web目录包含src目录和pom.xml。web/src/main/webapp/WEB-INF目录下生成了web.xml。 web/src/main/webapp目录下生成了简单的index.jsp,如下, 。
1
2
3
4
5
|
<
html
>
<
body
>
<
h2
>Hello World!</
h2
>
</
body
>
</
html
>
|
且demo/pom.xml自动新增内容,如下, 。
1
2
3
4
5
6
|
<modules>
<module>model</module>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
|
接下来作如下处理:
<groupId>com.jepcc.app</groupId>
和<version>1.0-SNAPSHOT</version>
1
2
3
4
5
|
<dependency>
<groupId>com.jepcc.app</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
</dependency>
|
注意哈,web层的打包方式是war!!.
web模块添加jetty插件 经过以上过程,相关模块全部创建完成,怎么运行起来呢?由于最终运行的是web模块,所以我们对该模块添加jetty支持,方便测试运行,修改web模块的pom.xml, 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
<?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>demo</artifactId>
<groupId>com.jepcc.app</groupId>
<version>
1.0
-SNAPSHOT</version>
</parent>
<artifactId>web</artifactId>
<packaging>war</packaging>
<name>web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http:
//www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-
8
</project.build.sourceEncoding>
<maven.compiler.source>
1.7
</maven.compiler.source>
<maven.compiler.target>
1.7
</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>
4.11
</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jepcc.app</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<finalName>web</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- 配置Jetty插件-->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>
3.1
.
0
</version>
</plugin>
<!-- see http:
//maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>
3.0
.
2
</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>
3.8
.
0
</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>
2.22
.
1
</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>
3.2
.
2
</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>
2.5
.
2
</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>
2.8
.
2
</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
|
进入demo目录,执行命令mvn clean install,完成模块构建.
构建完成后,web目录下多出了target目录,里面包含web.war.
进入web目录,执行命令:mvn jetty:run,启动jetty.
打开浏览器访问网址:http://localhost:8080/web/ 。
每个子模块都有自己的pom.xml文件,这就意味着每个子模块都有可以添加自己的依赖,这就可能造成一个相同的依赖每个模块都要添加一次,而且添加的版本可能不一致,这会造成项目混乱、导致运行时的各种问题。 所以,就应该有个父模块去统一管理所有的jar包,其他子模块去引用父模块就好了,子模块就不需要重复去定义依赖.
父模块有两个特点:
<packaging>
标签必须设置为pom
1
2
3
4
|
<groupId>com.jepcc.app</groupId>
<artifactId>demo</artifactId>
<version>
1.0
-SNAPSHOT</version>
<packaging>pom</packaging>
|
父模块在pom.xml中通过<modules>和<module>声明需要聚合的子模块.
1
2
3
4
5
6
|
<modules>
<module>model</module>
<module>dao</module>
<module>service</module>
<module>web</module>
</modules>
|
父模块的pom.xml通过<dependencyManagement>来统一管理所有jar包及其版本,这样子模块要引用一个依赖时,就不需要在自己的pom.xml里显式列出版本号。因为Maven会沿着父子层次往上走,直到找到拥有dependencyManagement标签的模块,最终确定依赖包对应的版本,并完成加载。 使用<dependencyManagement>来统一管理依赖的版本号,可以确保各个依赖的版本是一致的。 关于<dependencyManagement>和<dependencies>,二者有如下区别:
<dependencyManagement>
,只是在父模块中声明依赖,而不实现引入,因此子模块需要显式声明所需要的依赖,否则子模块是不会从父模块中继承下来的。<dependencies>
,即使子模块中不写依赖,子模块依然会从父模块中继承所有依赖。
子模块在自己的pom.xml中通过<parent>声明父模块.
1
2
3
4
5
|
<parent>
<artifactId>demo</artifactId>
<groupId>com.jepcc.app</groupId>
<version>
1.0
-SNAPSHOT</version>
</parent>
|
使用Maven构建多模块项目 。
到此这篇关于构建Maven多模块项目的方法的文章就介绍到这了,更多相关Maven多模块项目内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://blog.csdn.net/qzw752890913/article/details/119580573 。
最后此篇关于构建Maven多模块项目的方法的文章就讲到这里了,如果你想了解更多关于构建Maven多模块项目的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在使用 gradle 构建一个特定应用程序时遇到问题。该应用程序可以用 eclipse 编译和构建,它在平板电脑上运行良好。当我尝试使用 Gradle 构建它时,“compileDebugJava”
我有一个 C 程序,是一位离开的开发人员留给我的。我试图弄清楚他到底在做什么,并将软件重新安排成更合乎逻辑的东西,这样我就可以更轻松地构建它。我正在使用 CMake 构建,而他使用的是 Make。 有
我刚开始阅读“Pro Spring MVC with web flow”,它附带了一个我想遵循的代码示例。 我要什么 - 我想像书中那样构建应用程序,使用 Gradle 有什么问题 - 我没用过 Gr
我希望有人已经这样做了。我正在尝试为我的一个 angular 2 项目在 teamcity 中建立一个连续的构建。在做了一些研究之后,我按照以下步骤操作: 构建步骤 1:为 teamcity 安装 j
我有一个旧的 ASP.Net 网站解决方案,看起来像: 当我在 Visual Studio 中构建解决方案时,我得到以下输出: ------ Build started: Project: C:\..
我使用 gulp-usref、gulp-if、gulp-uglify、gulp-csso 和 gulp-file-include 来构建我的应用程序。除了 HTML 保持原样外,构建中的一切都运行良好
我正在使用 ionic2 开发内部移动应用程序。我可以通过以下方式成功构建 ios: ionic build ios and ionic build ios --prod 但当我这样做时,它一直失败
我是一位经验丰富的 .NET/C# 开发人员,但对这里的几乎所有技术/库(包括 SQL/DB 工作)都是新手。 我正在开发一个具有 Azure/Entity Framework .NET 后端和可移植
我正在使用 VS 2008。我可以使用 IDE 成功编译我的解决方案。但是,当我尝试使用 devenv.com 构建它时,它失败并提示“错误:找不到项目输出组'(无法确定名称)的输出”。该组、其配置或
版本: ember.js 2.7,ember-data 2.7 ember-cli 2.9.1//同样适用于 ember-cli 2.7 node 6.9.1, npm 3.10.9//也适用于 no
我第一次修补 AzureDevops,设置一些 CI 任务。 我有一个公共(public)存储库(开源)和一个包含 3 个 F# 项目的解决方案(.sln)。该解决方案在 Windows/Mac/Li
目前 5.1.5 版本或 STLPort CVS 存储库似乎仍不支持 VS2008。如果有人已经完成了这项工作,那么如果可能的话,分享会很有用:) 同样,了解 VS2005 或 2008 x64 构建
我有一个 Python 2.7 项目,到目前为止一直使用 gfortran 和 MinGW 来构建扩展。我使用 MinGW,因为它似乎支持 Fortran 代码中的写入语句和可分配数组,而 MSVC
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我想知道为什么在 Zimbra Wiki 中只列出了构建过程的特定平台。这意味着不可能在其他 Linux 发行版上构建 Zimbra? Zimbra 社区选择一个特殊的 Linux 发行版来构建 Zi
我将在 Swift 中构建一个 CLI 工具。我用这个命令创建了项目 swift package init --type executable当我构建我的项目并解析 时读取别名 Xcode 中的参数并
我想为添加到 docker 镜像的文件设置文件权限。我有这个简单的 Dockerfile: FROM ubuntu:utopic WORKDIR /app RUN groupadd -g 1000 b
当我使用 clBuildProgram在我的 OpenCl 代码中,它失败并显示错误代码 -11,没有任何日志信息。 这是我的代码的样子: ret = clBuildProgram(program
我有一个底部导航栏,它有一个列表页面,该页面使用状态块。 class _MainPageState extends State { int _index = 0; @override Wi
我在本地计算机上使用Jenkins(Jenkins URL未通过Internet公开,但该计算机上已启用Internet。) 我进行了以下配置更改: 在Jenkins工具上安装了Git和Github插
我是一名优秀的程序员,十分优秀!