认识与修改pom.xml档

pom.xml档是Maven中的主要设定档案,只要是Maven的专案,一定会配有一个pom.xml。基本上建议所有的JAR档在这里进行操作,即便是私人的JAR档也是,因为如果不写在这个档案的话,会影响Maven指令上的运作。下方来简单的介绍一下pom.xml。

Dependencies JAR档

在专案的运行中,不免用到一些framework或3rd party的JAR档,这些东西,会配置在pom.xml档案的<dependencies>标签中,如下图:

其中每一个JAR再用 <dependency>的标签包起来,这代表这个专案有用到这些JAR档,而Maven会自动寻找、下载并配置给专案使用。

3rd Party的Plugin

之前谈过Maven开放3rd Party的Plugin可供使用,这些3rd Party在使用上是透过Maven的指令,就如同我们下载这个网站范本时一样,而我们在使用3rd Party时,需要先宣告我们预计要使用的Plugin,宣告的位置在于pom.xml中的<plugins>(新版Maven为<pluginManagement>),如下图。

每一个Plugin再用<plugin>的标签包起来。

组态设定

pom.xml提供了一个非常便利的功能,那就是组态的设定,而且可以根据不同的环境,设定不同的组态,举DB的连线字串来说,我们都知道DB的连线字串会根据资料库的不同而变更,例如MySQL的连线字串:

jdbc:mysql://localhost/${db.name}

Ppostgresql的连线字串:

jdbc:postgresql://localhost/${db.name}

而Maven可以根据不同的DB设定不同的连线字串,最后在包WAR档的时候,使用你要的连线字串。

预设的组态设定在pom.xml档中是以 <properties>标签包起来的,如下图:

而特别的组态是用<profile>包起来,并且给予<id>,在需要替换时,下mvn指令时带入-P id名称,Maven就会自动帮你把指定的Profile,覆盖掉原本在 <properties>的内容。

而最后的组态,maven会自动帮你填入专案内的所有properties里,例如现在网站的jdbc.properties内容:

这个会在最后被打包为war档时,被pom.xml中的组态设定中替换掉。

pom.xml档案的修改

大概了解pom.xml的结构后,我们就要来修改pom.xml了,首先我们要更改三个参数,分别是:

  1. amp.genericCore→设为false

这是appfuse的plugin设定,主要是要客制化DB时的指令时会用到;否则预设它会帮我们实作好增删改查四样功能,但不包含DB的JOIN之类的功能。

  1. amp.fullSource→设为true

一样是appfuse的plugin设定,主要是客制化网站时候用到,除非你觉得它预设的功能已经完全符合你的需求,否则我们都需要客制化网站。

  1. db.name→设定资料库的名称

设定成功的结果如下图:

下一步,我们要开始著手修改我们网站上的一些内容了,让它可以更符合我们的需求。

下载完整版的网站程式

我们可以看到目前网站的程式架构长成像下图:

可以发现它只有action层,manager(service)与dao二层是没有看到的,所以我们把BaseAction.java打开来看:

可以发现其实appfuse把它包装起来了,它帮我们做好登入及增删改查的功能,但今天我如果需要额外新增功能的话,就变得不太方便了,所以我们在一开始要来解决这个问题。

指令appfuse:full-source

请开启命令列,切入到专案的目录,并输入指令:mvn appfuse:full-source(基本上mvn的指令会去查看pom.xml,所以如果该目录下的话没有pom.xml的话,会报错)

我们可以看到指令成功了,回到Eclipseh重新整理后,程式架构如下:

突然冒出了一堆东西,而且manager(service)与dao二层也跑出来了,这时候回去看BaseAction.java时,可以看到:

原本引用的UserManager是appfuse的东西,现在变成是我们程式里的东西了,这样子当我们要制作一些客制化的东西时,就变得方便很多了。

修改专案内的错误

我们把网页程式的范本下载到本机上了,但实际上还有不少的问题,现在要带领大家一个一个地解决,而第一个要解决的,是把专案上可以处理的红字拿掉。

解决红字的问题

  1. 首先看到的是src/test/resource中有一个sample-data.xsd,如下图:

这个档案开启后实在看不懂在做什么,不过xsd主要是在订义XML的schema用的,所以主要的资料在sample-data.xml中(这个资料的功能会在之后谈到),所以xsd不是什么重要的东西,直接砍掉以解决红字问题。

  1. 接下来我们来解决scr/main/webapp里的红字。

  1. header.jsp,出错的图形如下:

可以看到红线的地方在「ne」,ne其实not equal的意思,所以我们把它变更为下图,即可解决红线问题:

  1. default.jsp,出错的情况跟上方一样,如下图,透上一样的方式即可修改。

  1. scripts/login.js,在重新clean project后,会跳出红线的错误:

基本上第一行与最后一行的问题无法解决(也不要去解决,否则程式会有问题),所以不管如何,这个档案一定会出现红字,不过下方的红字原因是双引号造成的,只要用活用单、双引号就可以处理,如下图:

  1. pom.xml

之前汇入专案时就看到警告说pom.xml档有一些问题,不过因为下mvn appfuse:full-source会动到pom.xml,所以我们就先放著了,现在可以来处理其中的错误了。

pom.xml的问题很简单,单纯是因为maven版的不同造成的,所以只要把XML中的格式改为新版即可,变更方式如下:找到<plugins>位置,加入<pluginManagement>的标签即可,变更后结果如下图:

Plugins之前加上<pluginManagement>

Plugins的最后加上</pluginManagement>

专案的红字处理完后,会变成:

可以看到login.js仍是红字,不过其他的部份已经OK了;基本上login.js的红字不会影响专案的运行,所以请读者先放过它吧,等到你对这个范本的专案够了解,而且真的看不惯它的红字,再来花时间处理它吧。

修正Eclipse中的build path设定

因为appfuse中帮我们把test case写好了,所以在专案的build path有做了一些处理,让test case中的JAVA档不会影响到程式运行的JAVA档案,不过这个部份没有完全处理好,所以我们必须人工介入做一些调整。

首先在Eclipse中选择专案,按滑鼠右键→选择「Properties」,进入下方视窗后,再选择「JAVA Build Path」,出现下图视窗:(下图为了讲解方便,我们把它缩起来。)

可以看到总共有五个部份,其中三个是src/main,二个是src/test的,

  • 所有src/main的正确输出位置位:MyTestProject/target/classes。

  • 所有src/test的正确输出位置为:MyTestProject/target/test-classes。

有了这个认知后,我们一个一个来确认它们应该输出的正确位置:

上面我们可以看到src/main/webapp的output folder是错误的,点选这个「Ouput folder」后,利用「Edit」按钮来修正它:

修正后如下:

修改pom.xml中的组态

在我们准备运行程式前,在pom.xml中有几个组态需要做特殊处理的,这个部份要留在下完appfuse:full-source指令后进行,因为上述的指令会影响到pom.xml,所以现在我们可以一一来看要修正那些东西了。

Struts2的版本

下载下来的网站范本,是建立在struts2的2.3.7版,如下图:

因为struts2有版本安全性的问题,所以我们将Strtus2的版本做一下升级,透过Maven Repository (https://mvnrepository.com/)来查询目前有什么版本可用。

可以看到目前的最新版是2.5.2,因为笔者没有去研究2.3升级到2.5会有什么影响(技术追不完啊~~),所以只会升级到2.3的最后一版2.3.30。

点入2.3.30,可以看到Maven的dependency写法如下,不过因为Appfuse帮我们整理了,所以我们只要直接替换版本号即可。

升级struts2后的pom.xml。

储存后,因为Eclipse支援Maven Plugin,所以Maven会自动去下载最新的JAR档回本机。

Database组态

Appfuse预设的DB连线是MySQL,所以如果我们开发时是使用使用其他的资料库进行的话,那就要将<properties>中,跟SQL相关的参数换掉;就算我们是使用MySQL进行开发,也要进行我们的DB设定。跟DB相关组态的设定如下:(在<properties>中)

笔者在本机中安装了MySQL,并设定root密码为1111,所以只需要修改jdbc.password即可。

另外,DB的名称是在<db.name>中做设定的,在<properties>里:

JUnit版本

这个范本网站已经帮我们把test case写好,我们可以直接执行,不过当我们实际上去执行时,会发现无法执行,产生的错误如下:

这是因为版本不合造成的,所以我们要变更一下JUnit的版本,不过是JUnit-dep的版本,而不是JUnit的版本。找到junit-dep的地方,如下图:

将版本变更为4.8.1

储存后再重新执行JUnit,即能得到执行后的结果。

其他

读者有空可以看一下pom.xml中的一些设定,可以视情况调整版本,或增加一些Dependency的JAR档。

修改hibernate.properties

我们打开hibernate.properties这个档案来看,如下图:

基本上它用到了hibernate的Index技术,将一些资讯抓到硬碟来建立Index,以加快资料的处理,但是因为笔者对这个技术不够深入了解,而且最重要的,它会影响我们在开发时重启Server的流程(每次重启要先去清除硬碟的Index资料),所以笔者都会在此把它做关闭的动作,关闭的设定如下:

我们在最后也加了要不要在console显示SQL语法的控制,以方便我们在Debug上如果对SQL有疑问时,可以回来打开它。

修改了那么多东西后,下一篇我们要来架设这个网站了。

相关文章