java ee maven_针对新手的Java EE7和Maven项目–第1部分–简单的Maven项目结构–父pom...

java ee maven

为什么呢

很多时候,我在日常工作中试图解决一些基本或复杂的Maven / Java EE项目结构问题。 为了提供解决方案,我经常最终会尝试项目结构,测试我在不同应用程序服务器上的部署并细化我的配置。

Maven对于新来者来说可能会有陡峭的学习曲线,如果您将现代Java EE应用程序的“ 有时 ”复杂的配置要求添加进来,事情会变得更加令人沮丧。 在我的职业生涯中,我还看到很多初级Java开发人员 ,当他们加入一个大团队或一个项目时,大多数时候,项目结构已经由高级成员细化和配置。 他们认为这是可行的,并且没有花费时间来了解接线和配置。 我过去自己犯过这个错误。 他们被分配了简单的编码任务并且对需求进行了深入研究,但是不幸的是他们忘记了研究应用程序结构,而他们的高级同事也常常由于时间限制而忘记在特定领域进行培训。 当人们在没有经验的情况下开始尝试弄乱应用程序的结构而试图使其正常工作时,可能会导致事故。 Maven及其约定旨在为建立项目的结构和结构提供很多帮助,但是您仍然需要了解工具的约定,然后精通“ 配置 ”。

您经常会听到有人说“ 我在这里添加了这个库,它起作用了 ”,如果您回复“在那定义 ”,那么您可能会得到一些有趣的答案。 有时是偶然或幸运的,它起作用了,但是在复杂的多模块应用程序中,大多数情况下“ 它只是起作用 ”是一种轻描淡写,问题很快就会开始出现。

本系列文章主要针对Maven和Java EE新手 ,但如果您是高级开发人员,可以随时分享或用作演示。 我将在演示的基础上“攻击”我在日常工作中发现的一些实际问题,并尝试在提供基本解释或相关资源链接的同时提供解决方案。 请欢迎为可以以更简洁的方式执行/完成的操作添加评论,更正或参考。 学习Maven并创建“复杂”但易于维护的应用程序的最佳方法是从头开始创建空的pom文件。

我要传达给初级开发人员阅读我的文章的主要信息是, 研究”您的应用程序结构,询问底层构建工具是您工作的一部分,并且您永远不应以为其他方法总是会照顾您它 这也是挑战更艰巨的任务并提高您作为Java开发人员的技能的一步。

使用的核心技术

  • 基于Java EE 7的应用程序
  • 将包装为EAR
  • 将具有多个组件(wars,jars,ejb jars)
  • 将针对Java 7进行编译
  • 将使用Maven 3打包

我的演示耳应用

我的应用程序将是EAR ,对于这个特定的职位,该耳朵将包括2个顶级模块war和ejb-jar。 还有一个jar,其中将包含将成为我的数据库域模型(JPA实体)的类。 我将扩展结构,在以后的帖子中添加更多资源。 一个非常抽象的图像,仅用于提供一个想法,说明将“包含在我们的耳朵中”的内容。 将来的war模块将包含servlet或jsf组件,services模块将包含一组常见的无状态Sesson Bean(或消息驱动的Bean)。 域项目将具有用JPA 2构造正确注释的普通Java类。

CapturFiles_1

使用Maven构成我们应用程序的基本结构

为了让您耳目一新,我们需要使用Maven来定义模块和应用程序的各个部分,而Maven仍然是我们的构建/打包/配置工具。 这是最重要的步骤之一,如果您从一开始就掌握了这一步骤,那么其余的将只是简单的技术或特定的配置。 我要提出的并不是最终的解决方案,而是与标准非常接近的标准,这在大多数情况下是启动新应用程序的“ 路要走 ”,因此在这里没有有趣的细节,让我们遵循标准并开始在混凝土基础。

因此,让我们现在忘记上面的图片,让我们考虑一下Maven,可以定义哪些模块和多少模块,如何互连它们以及定义依赖项。 注意,我建议的工作方式是标准的,但不是最终的解决方案,这意味着您可以通过将应用程序打包成耳朵,定义更少的模块和依赖项来获得相同的结果。 假设我想涵盖高度复杂的结构,那么我将始终遵循标准来定义通用结构。

我假设您已经涵盖了Maven的一些基本知识,并且至少熟悉该术语。 如果没有在这里看看。

请记住,Maven即将按照正确定义的结构将文件放置在正确的位置,并定义maven插件,maven插件是用于完成特定工作的某种工具,包括编译,打包,复制文件等。 Maven,所以再次需要将插件定义到正确的位置并使用适当的配置。 您不是在编写make或ant脚本,而只是“插入”插件并要求Maven以明确定义的顺序执行它们。

作为我的好前同事(最近写了一封电子邮件), 打破生活和编码惯例是件好事,但绝不能使用Maven 。 他是对的!

如果不确定如何安装Maven,请在此处查看Windows或Mac

我的Maven项目结构–摘要

我们正在使用Maven进行构建,因此我们需要考虑Maven Pom和模块。 为了制作出所需的耳朵包装(见上文),我们需要5 poms

  • pom – 充当父母
  • 包含/定义最终耳朵的pom –负责配置最终程序包。
  • 一个包含/定义Web应用程序代码的pom,即我们的.war
  • 一个pom,它将包含/定义ejb-module的代码,ejb-module是我们要打包EJB的模块
  • 一个pom,它将包含将成为我们的JPA(数据库实体)的类

CapturFiles_4
如您所见,每个模块都有自己的pom,并且有父级,由于项目很小,假设他们不需要它,那么很多人都不会在其结构中添加东西。过了一会儿,当添加更多的模块时,您最终会陷入混乱。 因此,在此处记下“ parent pom真的很不错,可以进行配置 ”。 这是pom,您可以在其中定义所有依赖项版本(即库)并配置maven插件,以便所有子pom都继承通用配置。

我的Maven项目结构–父pom

正如我已经详细说明的那样,我们将从头开始,因此我将创建一个名为“ sample-parent ”的新文件夹,并在该文件夹中添加一个名为“ pom.xml ”的新文件。

<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><groupId>gr.javapapo</groupId><artifactId>sample-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging></project>

是的,不要激动,只需在定义“ pom ”的包装元素上记下即可。parent被称为parent,因为它“定义”并管理子模块,这是在模块定义部分完成的。 我们原来的pom变成了这样的样子。 这意味着我们必须在sample-parent下创建相关文件夹,然后将pom.xml添加到每个文件夹中。

<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><groupId>gr.javapapo</groupId><artifactId>sample-parent</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><modules><module>sample-ear</module><module>sample-web</module><module>sample-services</module><module>sample-domain</module></modules></project>

让我们继续添加更多配置...

这是重要的部分,因为我们为

  • 我们将要使用和配置的Maven插件
  • 任何库–使用的依赖项以及其他模块的引用
  • 其他通用属性,例如我们将要编译的Java运行时的版本
  • 源文件或其他资产的默认编码。
<properties><!--  encoding--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!--java version --><java-version>1.7</java-version><!-- plugin versions --><ejb-plugin-version>2.3</ejb-plugin-version><war-plugin-version>2.4</war-plugin-version><ear-plugin-version>2.9</ear-plugin-version><compiler-plugin-version>3.1</compiler-plugin-version><!-- dependency versions --><javaee-api-version>7.0</javaee-api-version><!-- EJB spec version --><ejb-spec-version>3.2</ejb-spec-version></properties>

让我们在属性部分之后添加另一个重要的部分,即dependencyManagement 。在这里,我们将定义可以在我们的应用程序模块中潜在使用的依赖关系及其版本。 在本节中,我们实际上关心版本,依赖项的包含或排除取决于子pom(这意味着它们不会自动添加)以及它们的范围。 因此, DependencyManagement部分是要控制的部分,版本集中在一处。

<dependencyManagement><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><version>${javaee-api-version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit-version}</version></dependency></dependencies></dependencyManagement>

父pom中的另一个最后但很重要的部分与dependencyManagemt相似,称为pluginManagement ,这是我们将在应用程序配置和打包期间定义和参考的所有maven插件的版本和通用配置的部分。在下面的示例中,我定义了最基本的编译器插件之一,但是我当然需要更多!

<!-- Plugin management --><build><pluginManagement><plugins><!-- compiler plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${compiler-plugin-version}</version><configuration><source>${java-version}</source><target>${java-version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></pluginManagement></build>

让我们添加并配置一些稍后将要使用的插件。在“插件管理”部分中添加它们。 我们定义了将要编译并打包我们的ejb的ejb插件以及将要打包我们的war的war插件。

<!-- ejb plugin --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-ejb-plugin</artifactId><version>${ejb-plugin-version}</version><configuration><ejbVersion>${ejb-spec-version}</ejbVersion></configuration></plugin><!-- war plugin -skinny wars mode! --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>${war-plugin-version}</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml><packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest></archive><webResources><resource><filtering>true</filtering><directory>src/main/webapp</directory><includes><include>**/web.xml</include></includes></resource></webResources></configuration></plugin>

那是现在

您可以在此处下载我们的最小样本(标记post1,bitbucket)。 当时,我们似乎还没有完成任何工作,但是最终定义一个干净而具体的父pom将成为我们在后续职位中要做的其余工作的基础。

学习要点

  • Maven标准布局
  • 父pom
  • DependencyManagement和pluginManagement的重要性

资源资源

  • Maven3
  • Java EE 7教程
  • Maven项目结构
  • 父pom
  • 什么是依赖管理?
  • 什么是插件管理?
  • 您可以在此处下载以上代码。

翻译自: https://www.javacodegeeks.com/2014/04/java-ee7-and-maven-project-for-newbies-part-1-a-simple-maven-project-structure-the-parent-pom.html

java ee maven

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】国家开放大学2018年秋季 0716-22T工程建设法规 参考试题

科目编号&#xff1a;[0720] 座位号 2018-2019学年度第一学期期末考试 中级会计实务&#xff08;二&#xff09; 试题 2019年 1 月 一、单选题&#xff08;本大题共10小题&#xff0c;每小题3分&#xff0c;共计30分&#xff09; &#xff08;★请考生务必将答案填入到下面对应…

什么是SFP光模块?光模块知识介绍!

光模块(optical module)由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括发射和接收两部分。简单的说&#xff0c;光模块的作用就是光电转换&#xff0c;发送端把电信号转换成光信号&#xff0c;通过光纤传送后&#xff0c;接收端再把光信号转换成电信号。常见…

【渝粤教育】国家开放大学2018年秋季 1062t文学英语赏析 参考试题

试卷代号&#xff1a;1073 法律文书 试题 2019年1月 一、单项选择题&#xff08;本大题共6小题&#xff0c;每小题3分&#xff0c;共18分。在每小题 列出的四个备选答案中只有一个符合题目要求&#xff0c;请将其序号字母填写在题目括号内。错选、多选或少选均不得分&#xff…

中继(洪泛中继、定向中继)在无线通讯中的应用

无线中继&#xff0c;即中继节点在无线网络中起到中继的作用&#xff0c;能实现信号的中继和放大&#xff0c;从而延伸无线网络的覆盖范围。就中继的运行机制而言&#xff0c;中继可分为洪泛中继、定向中继。 洪泛中继&#xff0c;是指中继设备在任何时刻收到的任意数据包&…

Jakarta EE 8状态

遵循Jakarta EE的您可能知道即将发布的Jakarta EE 8在功能上将与Java EE 8等效。其原因是我们想证明从Oracle的传输是完整的&#xff0c;并且我们能够产生流程&#xff0c;规范&#xff0c;测试套件以及通过Eclipse Foundation的兼容实现。 到目前为止&#xff0c; Eclipse Gl…

21秋期末考试财务会计(二)10165k2

1、下列属于非流动资产的项目是&#xff08;  &#xff09;。 &#xff08;2 分&#xff09; A&#xff0e;span lang"ZH-CN"在建工程 B&#xff0e;span lang"ZH-CN"应付账款 C&#xff0e;span lang"ZH-CN"应收利息 D&#xff0e;span lang&…

增加无线模块传输距离的方法

随着无线数据传输的发展&#xff0c;无线模块的应用也越来越广泛。无线模块广泛地应用于车辆监控、遥控、遥测、小型无线网络、无线抄表、门禁系统、小区传呼、工业数据采集系统、无线标签、身份识别、非接触RF智能卡、小型无线数据终端、安全防火系统、无线遥控系统、生物信号…

光模块的正确安装方法和使用须知

光模块(optical module)由光电子器件、功能电路和光接口等组成&#xff0c;光电子器件包括发射和接收两部分。简单的说&#xff0c;光模块的作用就是光电转换&#xff0c;发送端把电信号转换成光信号&#xff0c;通过光纤传送后&#xff0c;接收端再把光信号转换成电信号。那么…

[渝粤教育] 广东-国家-开放大学 21秋期末考试计量经济学10551k1

1、下面说法正确的是&#xff08; &#xff09;&#xff08;2 分&#xff09; A&#xff0e;先决变量是随机变量 B&#xff0e;外生变量是非随机变量 C&#xff0e;外生变量是随机变量 D&#xff0e;内生变量是非随机变量 2、平稳时间序列的均值和方差是固定不变的&#xff0c;…

大功率无线数传设备不接天线有何影响?

从无线传输技术诞生以来&#xff0c;给人们也是带来了极大的方便&#xff0c;与此同时和无线设备密切和分不开的设备就是天线了。天线在无线设备中发挥了极大的作用。在以前的无线电台&#xff0c;在电影上面看过的都是很熟悉&#xff0c; 如图1.1所示&#xff0c;这种无线电台…

[渝粤教育] 广东-国家-开放大学 21秋期末考试马克思主义基本原理概论(A)10882k1 (5)

1、在哲学范畴中&#xff0c;揭示事物引起和被引起关系的是原因与结果。&#xff08;2 分&#xff09; 正确 错误 2、真理具有客观性&#xff0c;但凡真理都是客观真理&#xff0c;这就意味着真理不具有人类认识的主观形式。&#xff08;2 分&#xff09; 正确 错误 3、国家垄断…

光模块该如何使用,光模块的使用方法介绍!

业内说的光模块&#xff0c;特指可热插拔的小型封装光模块&#xff0c;就是用在设备端口上的、可以在运行时进行热插拔的光模块&#xff0c;主要用来将设备&#xff08;一般指的是交换机或者路由器设备&#xff09;中的电信号转换成光信号。那么光模块该如何使用呢&#xff1f;…

【渝粤教育】 广东开放大学 21秋期末考试物业环境与秩序管理10122k2

1、根据&#xff08; &#xff09;原则&#xff0c;产生生活垃圾的单位和个人是分类投放的第一责任人。&#xff08;2 分&#xff09; A&#xff0e;谁产生、谁丢弃 B&#xff0e;谁负责、谁分类 C&#xff0e;谁丢弃、谁分类 D&#xff0e;谁产生、谁负责 2、整洁的物业环境&a…

CUBA 7的新功能

三年前&#xff0c;我们宣布了该框架的第二个公开可用的主要版本。 CUBA 6是改变游戏规则的版本–许可从专有转为Apache 2.0。 那些日子&#xff0c;我们甚至无法猜测从长远来看它将把框架带到哪里。 CUBA社区开始呈指数级增长&#xff0c;因此我们了解了开发人员如何使用框架的…

光模块功能失效的原因有哪些?

光模块主要用来将设备&#xff08;一般指的是交换机或者路由器设备&#xff09;中的电信号转换成光信号&#xff0c;然后通过一根光纤发射出去&#xff08;由光模块的发射端实现&#xff09;&#xff0c;同时可以接收外部一根光纤发射过来的光信号且转换成电信号&#xff08;通…

【渝粤教育】21秋期末考试建筑力学与结构10126k2111

1、下列哪个状态为正常使用的极限状态&#xff08;  &#xff09;。&#xff08;2 分&#xff09; A&#xff0e;雨蓬发生倾覆 B&#xff0e;轴心受压构件发生整体失稳 C&#xff0e;构件裂缝宽度超过使用容许值 D&#xff0e;构件材料发生疲劳破坏 2、力法的基本结构是 &…

【渝粤教育】国家开放大学2018年春季 0184-21T行政职业能力 参考试题

试卷编号&#xff1a;0184 2017-2018学年第二学期期末考试 行政职业能力 2018年7月 1&#xff0e;近现代西方科学与人文两种文化经历了融合、冲突和消解三个时期&#xff0c;反映到教育理念上也相应地经历了科学教育与人文教育的相互 、越走越远和共同反思三个阶段&#xff0…

关于夸克的思考

Quarkus是新的“超音速&#xff0c;亚原子” Java框架&#xff0c;目前引起了很多关注。 对于企业Java的未来而言&#xff0c;此构建和运行时工具背后的思想确实比我们感兴趣。 使用Quarkus有什么好处和缺点&#xff1f; 摆脱动力 Quarkus认为&#xff0c;在容器化的世界中&a…

高速连传与LORA的区别和优势

高速连传电台&#xff0c;支持Modbus协议&#xff0c;超远距离&#xff0c;不限包长&#xff0c;不间断连续传输&#xff0c;实现低延迟/高响应的半双工通讯&#xff1b;多种功率可选&#xff0c;同时支持RS232与RS485接口&#xff0c;适合于&#xff1a;高速连续传输、工控Mod…

光模块兼容性介绍,如何测试兼容光模块的兼容性?

经常买光模块的人都知道&#xff0c;光纤模块通常需要确认兼容码&#xff0c;因为目前市面上存在2种&#xff0c;一种是高性能的兼容模块&#xff0c;一种是原交换机品牌光模块&#xff0c;两者之间的价格差距较大。接下来就由飞畅科技的小编来为大家介绍下光模块的兼容性&…