Maven私服(二) – Nexus的安装

最后更新于:2022-04-01 20:45:31

Win7上面没有JDK7,我就只能先到Ubuntu上进行使用了 好了,在Ubuntu上安装了Nexus,解压后将其移动到了/opt目录下 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce65012f35c.jpg) 将原文件解压后,有2个文件夹, ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6501483bb.jpg) ( 这里记录一个错误,之前只复制了一个nexus,没有复制sonatype-work,这导致了nexus服务无法启动, 网上说这个文件夹会自动生成,可能是权限的问题,导致他没有生成成功。 ) 启动的话,进到bin目录 ~~~ ./nexus start ~~~ 启动服务 ~~~ ./nexus status ~~~ 服务状态 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce65015ac70.jpg) 启动成功后,就可以访问地址:http://localhost:8081/nexus/ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce650172edb.jpg) 然后我们可以使用管理员帐号登录看看: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6501968f4.jpg) 右上角那里是可以登录的,我们使用 admin admin123来登录,这是默认的密码 登录后,左侧会有更多的功能 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6501aa071.jpg)
';

Maven私服(一) – The nexus service was launched, but failed to start.

最后更新于:2022-04-01 20:45:29

今天想试一下Maven的私服,从网上下了个Nexus,安装,启动 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6500bc3dc.jpg) 报错信息: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6500d10b0.jpg) 看了下目录,应该有日志的, ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6500e7d7d.jpg) 好吧,说什么版本不对 在网上找到了答案: [http://blog.csdn.net/pk490525/article/details/14228423](http://blog.csdn.net/pk490525/article/details/14228423) 感谢分享 说是JDK的版本不对,我这里用的是JDK6,要使用JDK7才行,Nexus从2.6开始就不支持JDK6了。 还看到网上说直接指定下Java的地址也可以: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce650112af0.jpg) 本地没有JDK7就不尝试了。
';

Maven中引入本地jar包

最后更新于:2022-04-01 20:45:26

在实际开发中,我们可能会遇到有一些JAR包在Maven的公共仓库中没有,所以我们要在本地引入 这里也是刚刚尝试的,分享下 ### 1. systemPath方式引入 参考网址:[http://www.cnblogs.com/richard-jing/archive/2013/01/27/Maven_localjar.html](http://www.cnblogs.com/richard-jing/archive/2013/01/27/Maven_localjar.html) 感谢分享 我们在引入依赖的时候,有一个作用域,可以配置为system 对于依赖可以参考下这篇博客:(哎,看了下,写的不太好,有时间,重写下) [Maven深入学习(二)- 依赖 ](http://blog.csdn.net/yuguiyang1990/article/details/8866719) 示例: ~~~ org.postgresql postgresql 9.3 system ${project.basedir}/lib/postgresql-9.3.jar ~~~ 该jar包在项目中的位置: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce65005b21f.jpg) 上面参考的网址提醒:使用这种方式引入的JAR包在打包时不会一起打包,所以打包后找不到该JAR包 解决方法: 修改JAR包的位置,将JAR包放在resources目录下 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce650074ea4.jpg) 修改pom.xml ~~~ 4.0.0 org.ygy helloworld 0.0.1-SNAPSHOT jar helloworld http://maven.apache.org UTF-8 junit junit 3.8.1 test org.postgresql postgresql 9.3 system ${project.basedir}/src/main/resources/lib/postgresql-9.3.jar lib/ lib/ **/postgresql-9.3.jar ~~~ ### 2. 将JAR包安装到本地仓库 官方介绍:[http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html](http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html) 执行命令: ~~~ D:\WorkSpace\cognos\helloworld\src\main\resources\lib>mvn install:install-file - Dfile=postgresql-9.3.jar -DgroupId=org.postgresql -DartifactId=postgresql -Dvers ion=9.3 -Dpackaging=jar ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce6500888bb.jpg) 执行该命令后,Maven会将该JAR包部署到本地仓库中,这样在Maven中就可以正常使用了 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce65009e592.jpg) 但是其他的话,也需要执行以下mvn install命令才可以正常使用 ### 3. 将本地lib发布为仓库 使用repository标签,这个暂未成功,明天尝试下。
';

Maven常用命令-创建Web项目

最后更新于:2022-04-01 20:45:24

上一回,我们使用maven命令新建了Java项目,这回,我们新建个Web项目 命令: ~~~ yuguiyang@onepiece:~/Documents/maven_demo$ mvn archetype:generate \ > -DarchetypeArtifactId=maven-archetype-webapp \ > -DgroupId=org.ygy \ > -DartifactId=web_demo ~~~ 这里比上次的Java项目多一个配置: > -DarchetypeArtifactId=maven-archetype-webapp  这里指定了一个xx(怎么称呼忘记了,模板?) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce650026d70.jpg) 这里会生成Web项目需要的文件和目录 这里生成的web.xml是2.3的,会不会有点儿老 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce65003ffc2.jpg) 需要的话,目前先手动改一下,或者查一下资料看看。
';

Maven常用命令-创建Java项目

最后更新于:2022-04-01 20:45:22

我们之前使用Maven都是直接在Eclipse中创建的,有的时候步骤稍微冒犯些 这里我们学习下怎样用命令创建项目 参考网址: [http://www.cnblogs.com/PatrickLee/archive/2012/10/31/2747398.html](http://www.cnblogs.com/PatrickLee/archive/2012/10/31/2747398.html) 感谢分享。 1. 创建Java项目 ~~~ yuguiyang@onepiece:~/Documents/maven_demo$ mvn archetype:create \ > -DgroupId=org.ygy \ > -DartifactId=hello_maven ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ffee92e.jpg) 首次运行命令时,maven会下载一些依赖的jar包 我们等待她运行完就可以了 ~~~ yuguiyang@onepiece:~/Documents/maven_demo$ mvn archetype:create \ > -DgroupId=org.ygy \ > -DartifactId=hello_maven [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building Maven Stub Project (No POM) 1 [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-archetype-plugin:2.2:create (default-cli) @ standalone-pom --- [WARNING] This goal is deprecated. Please use mvn archetype:generate instead [INFO] Defaulting package to group ID: org.ygy [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:RELEASE [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: org.ygy [INFO] Parameter: packageName, Value: org.ygy [INFO] Parameter: package, Value: org.ygy [INFO] Parameter: artifactId, Value: hello_maven [INFO] Parameter: basedir, Value: /home/yuguiyang/Documents/maven_demo [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir: /home/yuguiyang/Documents/maven_demo/hello_maven [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.439 s [INFO] Finished at: 2014-10-13T10:01:41+08:00 [INFO] Final Memory: 13M/310M [INFO] ------------------------------------------------------------------------ yuguiyang@onepiece:~/Documents/maven_demo$ ~~~ 等看到BUILD SUCCESS就可以了 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce65000ea2c.jpg) (PS 在上面的日志中,我们看到一条警告 [WARNING] This goal is deprecated. Please use mvn archetype:generate instead 目测是说我们的命令中 mvn archetype:create \ 已经不推荐使用了,废弃掉了,使用 mvn archetype:generate 代替 我们试下 ~~~ yuguiyang@onepiece:~/Documents/maven_demo$ mvn archetype:generate \ > -DgroupId=org.ygy \ > -DartifactId=new_code ~~~ 这次执行时,又下载了一大堆jar包,中间还提示说要选择版本,直接Enter选择默认了 最后也是执行成功了的 以后我们还是使用官方推荐的命令吧 )
';

Ubuntu上安装Maven3

最后更新于:2022-04-01 20:45:20

好久没有用Java了,好久没有用Maven了, 今天想在Ubuntu上安装下Maven3 刚开始用apt-get 安装的,结果只有maven2,然后就卸载了 sudo apt-get remove maven2 然后在网上找了下教程,看看怎么安装 ### 1. 下载压缩包     我们从官网上下载Maven3 将压缩包解压 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ff7c83d.jpg) 解压后,将压缩包放到了 opt 目录下(在Linux中放在哪,没有什么理解,反正直接mv到opt去了) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ff99f26.jpg) ### 2. 配置环境变量 在网上找到的,说要修改 /etc/profile ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ffb9fa9.jpg) -------------------- ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ffd48c3.jpg) 修改后,mvn命令就可以使用了
';

Maven最佳实践:版本管理

最后更新于:2022-04-01 20:45:17

找到了一篇博客,很多啊,是讲Maven中的版本管理的,很好,分享一下, 原文作者:juvenshun 原文地址:[http://juvenshun.iteye.com/blog/376422](http://juvenshun.iteye.com/blog/376422) ------------------------------------------------------------------------------------- ### 什么是版本管理        首先,这里说的版本管理(version management)不是指版本控制(version control),但是本文假设你拥有基本的版本控制的知识,了解subversion的基本用法。版本管理中说得版本是指构件(artifact)的版本,而非源码的版本(如subversion中常见的rXXX,或者git中一次提交都有个sha1的commit号)。        比如我有一个项目,其artifactId为myapp,随着项目的进展,我们会生成这样一些jar:myapp-1.0-SNAPSHOT.jar,myapp-1.0.jar,myapp-1.1-SNAPSHOT.jar, myapp-1.0.1.jar等等。你可能会说,这很简单啊,我在POM中改个version,mvn clean install不就完了?但这只是表面,本文我将讲述,snapshot和release版本的区别,如何自动化版本发布(如果你的项目有几十个module,你就会觉得手工改POM来升级版本是很痛苦的事情),结合自动化发布的过程,这里还会介绍maven-release-plugin。此外,一些scm概念也会被涉及到,比如tag和branch。 ### 前提:版本控制        不管怎样,我们都需要建立一个项目并提交到SCM中,这里我以subversion为例。你得有一个配置好的subversion repository,这里我建立了一个空的svn仓库,其地址 为:https://192.168.1.100:8443/svn/myapp/ 现在,该目录下只有三个空的典型的子目录:/trunk/, branches/, tags/。分别用来存放主干,分支,以及标签。 接着将项目导入到svn仓库中,到项目根目录,运行如下命令: ~~~ svn import -m 'project initialization' https://192.168.1.100:8443/svn/myapp/trunk ~~~ (注意,这么做你会将目录下所有文件导入到svn库中,但是这其中某些目录和文件是不应该被导入的,如/target目录,以及eclipse相关的项目文件) 目前,我们将项目的版本设置为1.0-SNAPSHOT。 ### 为什么用SNAPSHOT?        我先说说如果没有SNAPSHOT会是什么样子。假设你的项目有2个模块,A,B,其中A依赖B。这三个模块分别由甲,乙两个个人负责开发。在开发过程中,因为A是依赖于B 的,因此乙每次做一个改动都会影响到甲,于是,乙提交了一些更改后,需要让甲看到。这个时候,怎么做呢?乙对甲说,“你签出我的代码,build一下就OK了”,甲有点不情 愿,但还是照做了,签出代码,svn clean install,然后,发现build出错了,有个测试没有pass。甲郁闷了,对乙说,“你的代码根本不能用,我不想build,你build好了给我”, 乙看了看确实自己的代码build不过,于是回去解决了,然后打了个jar包,扔给甲,甲对了对groupId,artifactId,放到了自己的.m2/repository/目录下,OK,能用了。 于是乙每次更新都这样做,打包,复制,然后甲粘贴,使用……渐渐的,大家发现这是个很笨的办法,这是纯手工劳动阿,程序员最BS的就是重复劳动。一天,甲对乙说,“你知道nexus么?你把你的jar发布到nexus上就可以了,我要用就自动去下载,这多棒!”乙说“哦?有这好东西,我去看看”于是乙发现了nexus这块新大陆,并成功的发布了B到nexus上。(见,[Nexus入门指南,(图文)](http://juvenshun.iteye.com/blog/349534))。        但是,请注意,我们这里的一切都假设没有SNAPSHOT,因此如果乙不更改版本,甲下载一次如B-1.0.jar之后,maven认为它已经有了正确的B的版本,就不会再重新下载。甲发现了这个问题,对乙说“你的更新我看不到,你更新了么?”乙说“不可能!我看看”,于是检查一下甲下载的C-1.0.jar,发现那是几天前的。乙一拍脑袋,说“这简单,我更新一下我的版本就好了,我发布个B-1.1.jar上去,你更新下依赖版本”,甲照做了,似乎这么做是可行的。        这里有一个问题,一次提交就更新一个版本,这明显不是正确的管理办法,此外,乙得不停的通知甲更新对B的依赖版本,累不累阿?1.0,或者说1.1,2.0,都代表了稳定,这样随随便便的改版本,能稳定么?        所以Maven有SNAPSHOT版本的概念,它与release版本对应,后者是指1.0,1.1,2.0这样稳定的发布版本。 现在乙可以将B的版本设置成1.0-SNAPSHOT,每次更改后,都mvn deploy到nexus中,每次deploy,maven都会将SNAPSHOT改成一个当前时间的timestamp,比如B-1.0- SNAPSHOT.jar到nexus中后,会成为这个样子:B-1.0-20081017-020325-13.jar。Maven在处理A中对于B的SNAPSHOT依赖时,会根据这样的timestamp下载最新的jar,默 认Maven每天更新一次,如果你想让Maven强制更新,可以使用-U参数,如: ~~~ mvn clean install -U ~~~ 现在事情简化成了这个样子:乙做更改,然后mvn deploy,甲用最简单的maven命令就能得到最新的B。 ### 从1.0-SNAPSHOT到1.0到1.1-SNAPSHOT SNAPSHOT是快照的意思,项目到一个阶段后,就需要发布一个正式的版本(release版本)。一次正式的发布需要这样一些工作: 1. 在trunk中,更新pom版本从1.0-SNAPSHOT到1.0 1. 对1.0打一个svn tag 1. 针对tag进行mvn deploy,发布正式版本 1. 更新trunk从1.0到1.1-SNAPSHOT 你可以手工一步步的做这些事情,无非就是一些svn操作,一些pom编辑,还有一些mvn操作。但是你应该明白,手工做这些事情,一来繁琐,而来容易出错。因此这里我介绍使用maven插件来自动化这一系列动作。 ### SCM 首先我们需要在POM中加入scm信息,这样Maven才能够替你完成svn操作,这里我的配置如下: ~~~ scm:svn:http://192.168.1.100:8443/svn/myapp/trunk/ scm:svn:https://192.168.1.100:8443/svn/myapp/trunk/ ~~~ 需要注意的是,很多windows使用的tortoiseSVN客户端,而没有svn命令行客户端,这会导致Maven所有svn相关的工作失败,因此,你首先确保svn --version能够运行。 #### 分发仓库 想要让Maven帮我们自动发布,首先我们需要配置好分发仓库。关于这一点,见[Maven最佳实践:Maven仓库](http://juvenshun.iteye.com/blog/359256)——分发构件至远程仓库。 #### maven-release-plugin 紧接着,我们需要配置maven-release-plugin,这个插件会帮助我们升级pom版本,提交,打tag,然后再升级版本,再提交,等等。基本配置如下: ~~~ org.apache.maven.plugins maven-release-plugin 2.0-beta-7 https://192.168.1.100:8443/svn/myapp/tags/ ~~~ GAV我就不多解释了,这里我们需要注意的是configuration元素下的tagBase元素,它代表了我们svn中的tag目录,也就是说,maven-release-plugin帮我们打tag的时候,其基础目录是什么。这里,我填写了svn仓库中的标准的tags目录。 #### 提交代码 接着,确保你的所有代码都提交了,如果你有未提交代码,release插件会报错,既然你要发布版本了,就表示代码是稳定的,所以要么要么把代码提交了,要么把本地的更改抛弃了。 #### 开始工作 现在,屏住呼吸,执行: ~~~ mvn release:prepare ~~~ 执行过程中,你会遇到这样的提示: *What is the release version for "Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT"? (org.myorg:myapp) 1.0: :* ——“你想将1.0-SNAPSHOT发布为什么版本?默认是1.0。”我要的就是1.0,直接回车。 *What is SCM release tag or label for "Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT"? (org.myorg:myapp) myapp-1.0: :* ——“发布的tag标签名称是什么?默认为myapp-1.0。”我还是要默认值,直接回车。 *What is the new development version for "Unnamed - org.myorg:myapp:jar:1.0-SNAPSHOT"? (org.myorg:myapp) 1.1-SNAPSHOT: :* ——“主干上新的版本是什么?默认为1.1-SNAPSHOT。”哈,release插件会自动帮我更新版本到1.1-SNAPSHOT,很好,直接回车。 然后屏幕刷阿刷,maven在build我们的项目,并进行了一些svn操作,你可以仔细查看下日志。 那么结果是什么呢?你可以浏览下svn仓库: - 我们多了一个tag:https://192.168.1.100:8443/svn/myapp/tags/myapp-1.0/,这就是需要发布的版本1.0。 - 再看看trunk中的POM,其版本自动升级成了1.1-SNAPSHOT。 这不正是我们想要的么?等等,好像缺了点什么,对了,1.0还没有发布到仓库中呢。 再一次屏住呼吸,执行: ~~~ mvn release:perform ~~~ maven-release-plugin会自动帮我们签出刚才打的tag,然后打包,分发到远程Maven仓库中,至此,整个版本的升级,打标签,发布等工作全部完成。我们可以在远程Maven 仓库中看到正式发布的1.0版本。 这可是自动化的 ,正式的 版本发布! ### Maven的版本规则 前面我们提到了SNAPSHOT和Release版本的区别,现在看一下,为什么要有1.0,1.1,1.1.1这样的版本,这里的规则是什么。 Maven主要是这样定义版本规则的: ~~~ <主版本>.<次版本>.<增量版本> ~~~ 比如说1.2.3,主版本是1,次版本是2,增量版本是3。 主版本一般来说代表了项目的重大的架构变更,比如说Maven 1和Maven 2,在架构上已经两样了,将来的Maven 3和Maven 2也会有很大的变化。次版本一般代表了一些功能的 增加或变化,但没有架构的变化,比如说Nexus 1.3较之于Nexus 1.2来说,增加了一系列新的或者改进的功能(仓库镜像支持,改进的仓库管理界面等等),但从大的架构上 来说,1.3和1.2没什么区别。至于增量版本,一般是一些小的bug fix,不会有重大的功能变化。 一般来说,在我们发布一次重要的版本之后,随之会开发新的版本,比如说,myapp-1.1发布之后,就着手开发myapp-1.2了。由于myapp-1.2有新的主要功能的添加和变化, 在发布测试前,它会变得不稳定,而myapp-1.1是一个比较稳定的版本,现在的问题是,我们在myapp-1.1中发现了一些bug(当然在1.2中也存在),为了能够在段时间内修复 bug并仍然发布稳定的版本,我们就会用到分支(branch),我们基于1.1开启一个分支1.1.1,在这个分支中修复bug,并快速发布。这既保证了版本的稳定,也能够使bug得到 快速修复,也不同停止1.2的开发。只是,每次修复分支1.1.1中的bug后,需要merge代码到1.2(主干)中。 上面讲的就是我们为什么要用增量版本。 ### 实战分支 目前我们trunk的版本是1.1-SNAPSHOT,其实按照前面解释的版本规则,应该是1.1.0-SNAPSHOT。 现在我们想要发布1.1.0,然后将主干升级为1.2.0-SNAPSHOT,同时开启一个1.1.x的分支,用来修复1.1.0中的bug。 首先,在发布1.1.0之前,我们创建1.1.x分支,运行如下命令: ~~~ mvn release:branch -DbranchName=1.1.x -DupdateBranchVersions=true -DupdateWorkingCopyVersions=false ~~~ 这是maven-release-plugin的branch目标,我们指定branch的名称为1.1.x,表示这里会有版本1.1.1, 1.1.2等等。updateBranchVersions=true的意思是在分支中更新版本,而 updateWorkingCopyVersions=false是指不更改当前工作目录(这里是trunk)的版本。 在运行该命令后,我们会遇到这样的提示: *What is the branch version for "Unnamed - org.myorg:myapp:jar:1.1-SNAPSHOT"? (org.myorg:myapp) 1.1-SNAPSHOT: :* ——"分支中的版本号是多少?默认为1.1-SNAPSHOT" 这时我们想要的版本是1.1.1-SNAPSHOT,因此输入1.1.1-SNAPSHOT,回车,maven继续执行直至结束。 接着,我们浏览svn仓库,会看到这样的目录:https://192.168.1.100:8443/svn/myapp/branches/1.1.x/,打开其中的POM文件,其版本已经是1.1.1-SNAPSHOT。 分支创建好了,就可以使用release:prepare和release:perform为1.1.0打标签,升级trunk至1.2.0-SNAPSHOT,然后分发1.1.0。 至此,一切OK。 ### 小结 本文讲述了如何使用Maven结合svn进行版本管理。解释了Maven中SNAPSHOT版本的来由,以及Maven管理版本的规则。并结合SCM的tag和branch概念展示了如何使用 maven-release-plugin发布版本,以及创建分支。本文涉及的内容比较多,且略显复杂,不过掌握版本管理的技巧对于项目的正规化管理来说十分重要。Maven为我们提供了一 些一套比较成熟的机制,值得掌握。
';

Maven知识点记录 – repositories

最后更新于:2022-04-01 20:45:15

在使用Maven时,有的jar包可以只在某一个仓库中有,而且只想在这个项目中使用,可以使用repositories来配置 ~~~ nexus Team Nexus Repository http://localhost:8081/nexus/content/groups/public offical Maven Official Repository http://repo1.maven.org/maven2 false ...... ~~~ 即在该项目可以使用这个仓库中的JAR包, 在开发时,如果公司有私服,可能会这样使用
';

Maven知识点记录 – profile

最后更新于:2022-04-01 20:45:13

在实际开发过程中,开发环境,测试环境和最后部署上线的环境都是不一样的,像数据库连接,都是要变的。 如果不使用Maven的话,我想到的就是修改配置文件,手动的修改; 使用Maven的话,就简单的多了。 先来看一个pom文件: ~~~ 4.0.0 org.ygy maven war 0.0.1-SNAPSHOT maven Maven Webapp http://maven.apache.org UTF-8 devlopment lufei shishi src/main/resources true true test http://www.deppon.com haha can you src/main/resources true false junit junit 4.10 test org.springframework spring-core 3.1.1.RELEASE org.springframework spring-beans 3.1.1.RELEASE org.springframework spring-context 3.1.1.RELEASE org.springframework spring-jdbc 3.1.1.RELEASE maven ~~~ 其中,有些标签可能没有用过,就是, Profile 的作用是允许你在项目文件(pom.xml)里定义若干个 profile 段,然后在编译时选择其中的一个用于覆盖项目文件原先的定义。 ~~~ devlopment lufei shishi src/main/resources true true ~~~ 我们大体上可以看懂,下面简单介绍一下具体的用法: 1.activation 激活方式 1)根据环境自动激活:如可以根据JDK版本,OS,Maven属性来激活 ~~~ dev false 1.5 Windows XP Windows x86 5.1.2600 mavenVersion 2.0.5 file2.properties file1.properties ... ~~~ 2)通过命令行激活 这是最直接和最简单的方式,比如你定义了一个名为 myProfile 的 profile,你只需要在命令行输入 mvn clean install -P myprofile 就能将其激活, 这种方式的好处很明显,但是有一个很大的弊端,当 profile 比较多的时候,在命令行输入这写 -P 参数会让人觉得厌烦, 所以,如果你一直用这种方式,觉得厌烦了,可以考虑使用其它自动激活的方式。 3)配置默认自动激活 ~~~ dev true ... ~~~ 4)配置 settings.xml 文件 profile 激活 settings.xml 文件可以在 ~/.m2 目录下,为某个用户的自定义行为服务,也可以在 M2_HOME/conf 目录下,为整台机器的所有用户服务。 而前者的配置会覆盖后者。同理,由 settings.xml 激活的 profile 意在为用户或者整个机器提供特定环境配置, 比如,你可以在某台机器上配置一个指向本地数据库 URL 的 profile,然后使用该机器的 settings.xml 激活它。激活方式如下: ~~~ ... local_db ~~~ (注:参考博客  [激活Maven profile的几种方式](http://juvenshun.iteye.com/blog/208714)) 2.filtering功能 这里的意思是,过滤src/main/resources下的文件 ~~~ src/main/resources true ~~~ Filtering 是 Maven Resources Plugin 的一个功能,它会使用系统属性或者项目属性的值替换资源文件(*.properties,*.xml)当中 ${…} 符号的值。 比如你系统属性有一项 “user.name=foobar”,那么资源文件当中的 ${user.name} 符号会在 Maven 编译时自动被替换为 “foobar”。 (注:参考博客 [Apache Maven 使用 profile 和 filtering 实现多种环境下的资源](http://archboy.org/2012/05/21/apache-maven-profile-filtering-multiple-build-environments/)) Maven官方Filter讲解:[http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html](http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html) 3.说了这么多,下面来实践一下 这是我们的Maven项目: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe9fc91.jpg) 一个是配置文件,一个是Spring的配置文件 demo.properties ~~~ hello ,${username} jdbc.url = ${jdbc.url} jdbc.username = ${jdbc.username} jdbc.password = ${jdbc.password} ~~~ applicationContext.xml ~~~ ~~~ pom.xml就是最上面提到的: ~~~ 4.0.0 org.ygy maven war 0.0.1-SNAPSHOT maven Maven Webapp http://maven.apache.org UTF-8 devlopment lufei shishi src/main/resources true true test http://www.deppon.com haha can you src/main/resources true false junit junit 4.10 test org.springframework spring-core 3.1.1.RELEASE org.springframework spring-beans 3.1.1.RELEASE org.springframework spring-context 3.1.1.RELEASE org.springframework spring-jdbc 3.1.1.RELEASE maven ~~~ 这里有2个profile,一个是development,一个是test,默认自动激活development 注意 ~~~ lufei shishi ~~~ ~~~ 索隆 gogo http://www.deppon.com haha can you ~~~ 这里的就是我们在配置文件中使用的会变化的配置,Maven会自动将 ${}替换成profile中配置的。 接下来,我们进入到该项目的根目录下,执行Maven命令 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64feba9f3.jpg) 1.使用默认激活方式 ~~~ mvn clean compile ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fed6f71.jpg) 进入target/classes目录 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64feefe6b.jpg) 打开demo.properties和applicationContext.xml文件 会发现,在development中指定的属性都已经成功替换 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ff11090.jpg) 而demo.properties中,jdbc相关的并没有配置,所以没有替换 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ff2836d.jpg) 2.使用命令更改激活方式 重新输入命令 ~~~ mvn clean compile -P test ~~~ 我们启用了test环境的配置方式 再次进入target/classes文件夹下查看,会发现不同的替换 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ff40a8f.jpg) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64ff5684f.jpg) 好了,到这里就可以简单使用了。
';

Maven创建的Web项目无法使用EL表达式

最后更新于:2022-04-01 20:45:10

之前在使用Maven时,创建一个We项目,有时候会用到EL表达式 ${message},会发现无法识别,显示如下效果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fde1c37.jpg) 一直没有明白为什么,今天,偶然间知道了原因。 如果你也遇到这样的情况,来看一下你的web.xml文件: ~~~ Archetype Created Web Application CharacterEncodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true CharacterEncodingFilter /* helloworld org.springframework.web.servlet.DispatcherServlet 1 helloworld / ~~~ 这是旧版本的web.xml格式,可以到Tomcat下找一个web.xml看一下区别: 旧版本的web.xml ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe04683.jpg) 新版本的web.xml ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe1d921.jpg) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe363f5.jpg) 把上面几行标签复制一下:(改成UTF-8) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe4dbde.jpg) 复制过去之后,重新启动项目,在访问一次那个界面: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe64fdb.jpg) 好了,已经可以正常使用了,![大笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-19_569e21abc5518.gif) 。 这里还有一个方法也可以解决,但是比较麻烦,就是在JSP页面上加上一行代码:(JSP2.0中支持EL表达式,老版本不支持) ~~~ <%@ page isELIgnored ="false" %> ~~~ Web容器默认isELIgnored="false"。 如果设定为真,那么JSP中的表达式被当成字符串处理。 大家可以试一下。 注意: 这里,还遇到一个问题,就是将web.xml修改之后,依然不能识别EL表达式,后来发现是配置出了问题: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fe82534.jpg) 注意这里的 Dynamic Web Module一定也要修改为2.5或者更高的版本 有这样一句话:当然工程的版本、jdk版本、tomcat版本、jar的版本缺一不可 (摘自其他博客)
';

Maven深入学习(四)- 知识总结

最后更新于:2022-04-01 20:45:08

### 1.dependencies与dependencyManagement 在以前的单独项目中,在配置项目中的依赖时,使用dependencies标签。 而在现在的多模块项目中,比如在继承中: 如果在父亲中配置了dependencies,那么孩子会继承父亲中配置的所有依赖 如: ~~~ junit junit 3.8.1 test ~~~ 在孩子中什么也不配置,也可以看到项目会引入junit的jar包。 那什么是dependencyManagement呢? 父亲的pom ~~~ 4.0.0 org.ygy.mvc parent 0.0.1-SNAPSHOT pom parent http://maven.apache.org UTF-8 org.apache.struts struts2-core 2.3.1 junit junit 3.8.1 test ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fdb3a93.jpg) 可以看到,父亲中,只引入了Junit一个依赖 在dependencyManagement标签中配置的依赖不会出现在自己或者孩子中,但是,会保持版本和scope与父亲一致。 孩子的pom ~~~ 4.0.0 org.ygy.mvc parent 0.0.1-SNAPSHOT son jar son http://maven.apache.org org.apache.struts struts2-core ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fdc80b6.jpg) 在 pom 中指明 dependency management 元素的方式 maven 结合项目继承来管理依赖。在多模块应用中,可能多个子项目会有共同的依赖。 此时为了正确运行,必须让所有的子项目使用依赖项的同一版本。 必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的成果。 因此,应在顶层的 pom 中定义共同的依赖关系。
';

Maven深入学习(三)- 聚合与继承

最后更新于:2022-04-01 20:45:06

### 1.聚合 在使用Maven的过程中,手边可能有很多个项目,都需要打包,或者同时进行一些操作,这时候,如果一个一个手动的去操作, 就会显得很麻烦。这时候,使用聚合就可以解决问题了。 假设,现在已有项目brother01,brother02,我们想要同时将这两个项目打包。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fd4c318.jpg) 其中,brother01和brother02是正常的项目,brother00是一个空的项目,它可以只有一个pom文件 ~~~ 4.0.0 org.ygy.mvc brother00 0.0.1-SNAPSHOT pom brother00 http://maven.apache.org UTF-8 ../brother01 ../brother02 ~~~ 注意: 1)packaging方式为pom 2)modules标签,将需要统一管理的项目引进来即可 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fd629c7.jpg) 聚合,就好像是将实体类放在entity下,将持久层发在dao下,放在一起统一管理。 ### 2.继承 继承的概念很好理解,和Java中的意思一样。只不过,在Maven中继承的是pom。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fd78873.jpg) parent的pom ~~~ 4.0.0 org.ygy.mvc parent 0.0.1-SNAPSHOT pom parent http://maven.apache.org UTF-8 junit junit 3.8.1 test ~~~ son的pom ~~~ 4.0.0 org.ygy.mvc parent 0.0.1-SNAPSHOT son jar son http://maven.apache.org ~~~ 注意: 1)父亲的pom同样要指定packaging为pom 可以继承的元素: ~~~ groupId :项目组 ID ,项目坐标的核心元素; version :项目版本,项目坐标的核心元素; description :项目的描述信息; organization :项目的组织信息; inceptionYear :项目的创始年份; url :项目的 url 地址 develoers :项目的开发者信息; contributors :项目的贡献者信息; distributionManagerment :项目的部署信息; issueManagement :缺陷跟踪系统信息; ciManagement :项目的持续继承信息; scm :项目的版本控制信息; mailingListserv :项目的邮件列表信息; properties :自定义的 Maven 属性; dependencies :项目的依赖配置; dependencyManagement :醒目的依赖管理配置; repositories :项目的仓库配置; build :包括项目的源码目录配置、输出目录配置、插件配置、插件管理配置等; reporting :包括项目的报告输出目录配置、报告插件配置等。 ~~~ ### 3.聚合与继承的关系 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fd918a3.jpg) 区别与共同点摘自博客:[http://chenzhou123520.iteye.com/blog/1582166](http://chenzhou123520.iteye.com/blog/1582166) 聚合是为了协同项目构建 继承是为了消除重复
';

Maven深入学习(二)- 依赖

最后更新于:2022-04-01 20:45:04

从网上找到一份Maven3学习资料,是一份学习笔记,很不错,分享一下:[http://download.csdn.net/detail/jolingogo/5314305](http://download.csdn.net/detail/jolingogo/5314305) ### 1.依赖的配置 先来看一个pom.xml ~~~ 4.0.0 com.deppon.demo test01 war 0.0.1-SNAPSHOT test01 Maven Webapp http://maven.apache.org UTF-8 junit junit 3.8.1 test javax.servlet servlet-api 2.5 provided test01 ~~~ 根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖 每个依赖包含的元素有: groupId,artifactId,version:依赖的基本坐标 type:依赖的类型。大部分情况下,该元素不必声明,默认是jar scope:依赖的范围 optional:标记依赖是否可选 exclusions:用来排除传递性依赖 ### 2.scope (依赖范围) 在Maven的世界中,有很多种classpath,编译classpath,测试classpath,运行classpath 依赖范围就是用来控制依赖与这三种classpath的关系 compile:编译依赖范围。如果没有指定,则默认使用该依赖范围。使用此范围的依赖,在编译,测试,运行着三种classpath都有效。 test:测试依赖范围。使用此范围的依赖,只对测试classpath有效,即只有在测试的代码中才可用。典型例子就是Junit provided:已提供依赖范围。使用此范围的依赖对于编译和测试都有效,但在运行时无效。典型例子就是servlet-api runtime:运行时依赖范围。使用此范围的依赖对于测试和运行classpath有效,但在编译主代码是无效。典型例子就是JDBC驱动实现 system:系统依赖范围。对于编译和测试有效,但在运行时无效。使用system范围时,必须通过systemPath元素显示的指定依赖文件的路径(慎用) import:导入依赖范围
';

Maven深入学习(一)- 坐标

最后更新于:2022-04-01 20:45:01

从这里开始的话,一边参照PDF文档《Maven实战》,一边整理一下自己的理解,和大家一起分享。 ### 1.什么是Maven坐标        就像平面上的坐标一样,通过 x , y 可以唯一确定一个点。Maven的坐标可以唯一的标识一个Java构件,Maven世界中有各种的jar包,每一个jar包都有他自己的坐标。 那在Maven中怎样来标识一个坐标呢?也是x 和 y吗? ### 2.Maven坐标的元素 一共有5中元素:groupId,artifactId,version,packaging,classifier 示例: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fd285da.png) groupId:定义当前Maven项目隶属的实际项目,表示方式与Java包名的表示方式类似,通常与域名反向一一对应。 artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目的名称作为artifactId的前缀。 version:该元素定义Maven项目当前所处的版本 packaging :该元素定义Maven项目的打包方式,打包方式通常与所生成构件的文件扩展名对应 classifier:该元素用来帮助定义构建输出的一些附属构件 其中,groupId,artifactId,version 3个元素是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的。
';

(十) – 阶段小结

最后更新于:2022-04-01 20:44:59

嗯,上一篇“使用Maven构建SSH”,示例已经写好,最近没什么太多时间整理,所以博客的话,可能在周六日更新,先整理一下最近学习Maven的心得。 1.使用Maven来构建项目,的确挺方便,尤其是依赖管理,使用的各种依赖包,都可以通过配置文件来修改,而不是像以前一样,要把所有的包都拷贝到项目中, 这应该是约定由于配置吧![微笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-18_569ca449c5105.gif) 2.看看之前整理的博客,发现了一个问题,好像很多的博客都比较类似,其实,不管是Web项目,Struts2项目,SSH项目都是一样的原理,只是在Maven的资源库中找到依赖包的配置,然后向以往一样就可以了![委屈](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-25_56a5a367bba9a.gif) ,哎...之后的话,身边有一些Maven的资料,书籍,可能是一边看书,一边整理博客。 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [Maven学习(一)- 环境搭建](http://blog.csdn.net/jolingogo/article/details/8775046) - [Maven学习(二)- 安装m2eclipse插件 ](http://blog.csdn.net/jolingogo/article/details/8796410) - [Maven学习(三)- 使用Maven构建Web项目](http://blog.csdn.net/jolingogo/article/details/8796726) - [Maven学习(四)- 使用Maven构建Web项目-测试](http://blog.csdn.net/jolingogo/article/details/8797153) - [Maven学习(五)- 使用Maven构建Struts2项目](http://blog.csdn.net/jolingogo/article/details/8798052) - [Maven学习(六)- 构建Hibernate项目](http://blog.csdn.net/jolingogo/article/details/8798684) - [Maven学习(七)- 构建Spring项目](http://blog.csdn.net/jolingogo/article/details/8799307) - [Maven学习(八)- 构建MyBatis项目](http://blog.csdn.net/jolingogo/article/details/8801158) - [Maven学习(九)- 构建SSH项目](http://blog.csdn.net/jolingogo/article/details/8811817) - [Maven学习(十) - 阶段小结 ](http://blog.csdn.net/jolingogo/article/details/8821375) - [专栏:Maven学习之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
';

(九)- 构建SSH项目

最后更新于:2022-04-01 20:44:57

在这里整合一下,使用Maven构建一个SSH项目 ### 1.新建一个Web项目 可以参照前面的博客 ### 2.添加依赖,修改pom.xml ~~~ 4.0.0 com.deppon.demo test06 war 0.0.1-SNAPSHOT test06 Maven Webapp http://maven.apache.org UTF-8 junit junit 4.10 test org.apache.struts struts2-core 2.3.1 org.apache.struts struts2-spring-plugin 2.3.1 org.hibernate hibernate-core 3.6.5.Final commons-dbcp commons-dbcp 1.4 log4j log4j 1.2.16 org.slf4j slf4j-api 1.6.1 org.slf4j slf4j-nop 1.6.4 javassist javassist 3.11.0.GA org.springframework spring-core 3.1.1.RELEASE org.springframework spring-beans 3.1.1.RELEASE org.springframework spring-context 3.1.1.RELEASE org.springframework spring-jdbc 3.1.1.RELEASE org.springframework spring-orm 3.1.1.RELEASE org.springframework spring-web 3.1.1.RELEASE test06 ~~~ 3.各种配置文件,各种代码 这里的话,就不贴代码了,和使用MyEclipse开发Web项目是一样的,在后一篇博客中也提到了,其实,之前的好多博客都是一样的原理,都是修改依赖配置,其他没什么, 相关的项目应该就到这里了,以后的话,会根据一些资料系统的学习一下maven,整理出更好的博客来![大笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-19_569e21abc5518.gif) 。 使用Maven构建SSH项目源码:[http://download.csdn.net/detail/jolingogo/5274494](http://download.csdn.net/detail/jolingogo/5274494) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [Maven学习(一)- 环境搭建](http://blog.csdn.net/jolingogo/article/details/8775046) - [Maven学习(二)- 安装m2eclipse插件 ](http://blog.csdn.net/jolingogo/article/details/8796410) - [Maven学习(三)- 使用Maven构建Web项目](http://blog.csdn.net/jolingogo/article/details/8796726) - [Maven学习(四)- 使用Maven构建Web项目-测试](http://blog.csdn.net/jolingogo/article/details/8797153) - [Maven学习(五)- 使用Maven构建Struts2项目](http://blog.csdn.net/jolingogo/article/details/8798052) - [Maven学习(六)- 构建Hibernate项目](http://blog.csdn.net/jolingogo/article/details/8798684) - [Maven学习(七)- 构建Spring项目](http://blog.csdn.net/jolingogo/article/details/8799307) - [Maven学习(八)- 构建MyBatis项目](http://blog.csdn.net/jolingogo/article/details/8801158) - [Maven学习(九)- 构建SSH项目](http://blog.csdn.net/jolingogo/article/details/8811817) - [Maven学习(十) - 阶段小结 ](http://blog.csdn.net/jolingogo/article/details/8821375) - [专栏:Maven学习之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
';

(八)- 构建MyBatis项目

最后更新于:2022-04-01 20:44:55

在这里,写一下,怎么使用Maven构建MyBatis项目。 ### 1. 新建一个Web项目 可以参考前面的博客 ### 2. 修改pom.xml,添加MyBatis依赖 ~~~ 4.0.0 com.deppon.demo test05 war 0.0.1-SNAPSHOT test05 Maven Webapp http://maven.apache.org UTF-8 junit junit 4.10 test org.mybatis mybatis 3.1.1 log4j log4j 1.2.16 org.slf4j slf4j-api 1.6.1 org.slf4j slf4j-nop 1.6.4 test05 ~~~ ### 3. 添加mybatis-config.xml ~~~ ~~~ PersonEntityMapper.xml ~~~ insert into t_person(id , name) values(#{id} , #{name}) ~~~ IPersonEntityDao.java ~~~ package com.deppon.test05.dao; import java.util.List; import com.deppon.test05.entity.PersonEntity; public interface IPersonEntityDao { /** * 插入一条记录 * @param person */ public void insert(PersonEntity person); /** * 查询所有记录 * @return */ public List queryAll(); } ~~~ PersonEntityDao.java ~~~ package com.deppon.test05.dao.impl; import java.util.List; import org.apache.ibatis.session.SqlSession; import com.deppon.test05.dao.IPersonEntityDao; import com.deppon.test05.entity.PersonEntity; import com.deppon.test05.util.MyBatisUtil; public class PersonEntityDao implements IPersonEntityDao { public static final String NAMESPACE = "com.deppon.test05.mapper.PersonEntityMapper"; @Override public void insert(PersonEntity person) { SqlSession session = MyBatisUtil.getSession(); session.insert(NAMESPACE + ".insert" , person); session.commit(); session.close(); } @Override public List queryAll() { SqlSession session = MyBatisUtil.getSession(); List personList = session.selectList(NAMESPACE + ".queryAll"); session.commit(); session.close(); return personList; } } ~~~ PersonEntity.java ~~~ package com.deppon.test05.entity; public class PersonEntity implements java.io.Serializable { private static final long serialVersionUID = -1138245964662330288L; private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "PersonEntity [id=" + id + ", name=" + name + "]"; } } ~~~ MyBatisUtil.java ~~~ package com.deppon.test05.util; import java.io.IOException; import java.io.InputStream; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisUtil { private static SqlSessionFactory factory = null; private static void initialFactory() { String resource = "mybatis-config.xml"; try { InputStream in = Resources.getResourceAsStream(resource); factory = new SqlSessionFactoryBuilder().build(in); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSession() { if(factory == null) { initialFactory(); } return factory.openSession(); } } ~~~ 测试程序: ~~~ package com.deppon.test05.dao; import java.util.List; import org.junit.Before; import org.junit.Test; import com.deppon.test05.dao.impl.PersonEntityDao; import com.deppon.test05.entity.PersonEntity; public class PersonEntityDaoTest { private IPersonEntityDao personEntityDao; @Before public void before() { personEntityDao = new PersonEntityDao(); } @Test public void testQueryAll() { List personList = personEntityDao.queryAll(); for(PersonEntity each : personList) { System.out.println(each); } } @Test public void testInsert() { PersonEntity person = new PersonEntity(); person.setId(200); person.setName("乔巴"); personEntityDao.insert(person); } } ~~~ 项目结构如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fcd9ec4.png) 注意:记得那两条命令哦,亲![大笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-19_569e21abc5518.gif) (前面的博客有) 结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fd03b4b.png) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [Maven学习(一)- 环境搭建](http://blog.csdn.net/jolingogo/article/details/8775046) - [Maven学习(二)- 安装m2eclipse插件 ](http://blog.csdn.net/jolingogo/article/details/8796410) - [Maven学习(三)- 使用Maven构建Web项目](http://blog.csdn.net/jolingogo/article/details/8796726) - [Maven学习(四)- 使用Maven构建Web项目-测试](http://blog.csdn.net/jolingogo/article/details/8797153) - [Maven学习(五)- 使用Maven构建Struts2项目](http://blog.csdn.net/jolingogo/article/details/8798052) - [Maven学习(六)- 构建Hibernate项目](http://blog.csdn.net/jolingogo/article/details/8798684) - [Maven学习(七)- 构建Spring项目](http://blog.csdn.net/jolingogo/article/details/8799307) - [Maven学习(八)- 构建MyBatis项目](http://blog.csdn.net/jolingogo/article/details/8801158) - [Maven学习(九)- 构建SSH项目](http://blog.csdn.net/jolingogo/article/details/8811817) - [Maven学习(十) - 阶段小结 ](http://blog.csdn.net/jolingogo/article/details/8821375) - [专栏:Maven学习之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
';

(七)- 构建Spring项目

最后更新于:2022-04-01 20:44:52

在这里,使用Maven构建一个Spring项目,正在做练习,下午有事,可能要晚上回来接着写...![快哭了](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-14_575f8babbf599.gif) 构建单独项目的话,其实都差不多 ### 1. 新建一个Web项目 参考之前的博客 ### 2.修改 pom.xml,添加Spring依赖 ~~~ 4.0.0 com.deppon.demo test04 war 0.0.1-SNAPSHOT test04 Maven Webapp http://maven.apache.org UTF-8 junit junit 4.10 test org.springframework spring-core 3.1.1.RELEASE org.springframework spring-beans 3.1.1.RELEASE org.springframework spring-context 3.1.1.RELEASE org.springframework spring-jdbc 3.1.1.RELEASE test04 ~~~ ### 3.添加Spring配置文件,applicationContext.xml ~~~ ~~~ IPersonDao.java ~~~ package com.deppon.test04.dao; public interface IPersonDao { public void save(); } ~~~ PersonDao.java ~~~ package com.deppon.test04.dao.impl; import com.deppon.test04.dao.IPersonDao; public class PersonDao implements IPersonDao { @Override public void save() { System.out.println("------------from PersonDao.save()"); } } ~~~ IPersonService.java ~~~ package com.deppon.test04.service; public interface IPersonService { public void processSave(); } ~~~ PersonService.java ~~~ package com.deppon.test04.service.impl; import com.deppon.test04.dao.IPersonDao; import com.deppon.test04.service.IPersonService; public class PersonService implements IPersonService { private IPersonDao personDao; public void setPersonDao(IPersonDao personDao) { this.personDao = personDao; } @Override public void processSave() { System.out.println("-------------from PersonService.processSave()"); personDao.save(); } } ~~~ 测试类:PersonServiceTest.java ~~~ package com.deppon.test04.service; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; public class PersonServiceTest { private BeanFactory factory = null; @Before public void before() { factory = new ClassPathXmlApplicationContext("applicationContext.xml"); } @Test public void testSpring() { IPersonService personService = (IPersonService) factory.getBean("personService"); personService.processSave(); } } ~~~ 项目结构如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fca7532.png) 注意: 在运行测试程序之前,还需要运行两个命令:(ps:可能出现找不到applicationContext.xml的错误!) > 1. mvn compile > 2.mvn test-compile 运行结果: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fcc128d.png) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [Maven学习(一)- 环境搭建](http://blog.csdn.net/jolingogo/article/details/8775046) - [Maven学习(二)- 安装m2eclipse插件 ](http://blog.csdn.net/jolingogo/article/details/8796410) - [Maven学习(三)- 使用Maven构建Web项目](http://blog.csdn.net/jolingogo/article/details/8796726) - [Maven学习(四)- 使用Maven构建Web项目-测试](http://blog.csdn.net/jolingogo/article/details/8797153) - [Maven学习(五)- 使用Maven构建Struts2项目](http://blog.csdn.net/jolingogo/article/details/8798052) - [Maven学习(六)- 构建Hibernate项目](http://blog.csdn.net/jolingogo/article/details/8798684) - [Maven学习(七)- 构建Spring项目](http://blog.csdn.net/jolingogo/article/details/8799307) - [Maven学习(八)- 构建MyBatis项目](http://blog.csdn.net/jolingogo/article/details/8801158) - [Maven学习(九)- 构建SSH项目](http://blog.csdn.net/jolingogo/article/details/8811817) - [Maven学习(十) - 阶段小结 ](http://blog.csdn.net/jolingogo/article/details/8821375) - [专栏:Maven学习之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
';

(六)- 构建Hibernate项目

最后更新于:2022-04-01 20:44:50

前面我们使用Maven构建了Struts2项目,这里我们来试一下Hibernate项目: ps: 昨天晚上没有整明白,例子也一直有问题,就没有完成博客,早上起来才明白错在哪![大笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-19_569e21abc5518.gif) 这里的例子,大体框架应该是正确的,但是,对于Maven的很多约定都没有掌握,估计包的命名都不是非常好,等以后,理解深刻了再改吧![微笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-18_569ca449c5105.gif) ### 1. 构建一个基本的Web项目 这里请参考前面的博客,一样的 ### 2. 添加依赖,修改pom.xml ~~~ 4.0.0 com.deppon.demo test03 war 0.0.1-SNAPSHOT test03 Maven Webapp http://maven.apache.org UTF-8 junit junit 4.10 test org.hibernate hibernate-core 3.6.5.Final log4j log4j 1.2.16 org.slf4j slf4j-api 1.6.1 org.slf4j slf4j-nop 1.6.4 javassist javassist 3.11.0.GA test03 ~~~ 在保存的时候,Maven会自动从库中各种包下载到本地,如果有异常的话,可以尝试手动下载 ### 3. 添加hibernate.cfg.xml和log4j.properties资源文件 注意,资源文件的话,根据约定,需要放在src/main/resources文件夹下 hibernate.cfg.xml ~~~ com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://localhost:1433;DatabaseName=Demo ygy shishi none org.hibernate.dialect.SQLServerDialect thread true true update ~~~ log4j.properties ~~~ log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.rootLogger=debug, stdout log4j.logger.org.hibernate.tool.hbm2ddl=debug ~~~ ### 4. 新建一个实体类,测试一下 PersonEntity.java ~~~ package com.deppon.test03.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "t_person") public class PersonEntity implements java.io.Serializable { private static final long serialVersionUID = -4376187124011546736L; private Integer id; private String name; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @Column(length = 50 , nullable = false , unique = true) public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "PersonEntity [id=" + id + ", name=" + name + "]"; } } ~~~ HibernateUtil.java ~~~ package com.deppon.test03.util; import org.apache.log4j.Logger; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { /**ThreadLocal Session Map */ public static final ThreadLocal SESSIONMAP = new ThreadLocal(); private static final SessionFactory sessionFactory; private static final Logger LOGGER = Logger.getLogger(HibernateUtil.class); static { try { LOGGER.debug("HibernateUti.static - loading cofig"); sessionFactory = new Configuration().configure("hibernate.cfg.xml") .buildSessionFactory(); LOGGER.debug("HibernateUtil.static - end"); } catch (Throwable ex) { ex.printStackTrace(); LOGGER.error("HibernateUti error : ExceptionInInitializerError"); throw new ExceptionInInitializerError(ex); } } private HibernateUtil() { } public static Session getSession() throws HibernateException { Session session = SESSIONMAP.get(); if(session == null) { session = sessionFactory.openSession(); SESSIONMAP.set(session); } return session; } public static void closeSession() throws HibernateException { Session session = SESSIONMAP.get(); SESSIONMAP.set(null); if(session != null) { session.close(); } } } ~~~ 测试类 ModelTest.java ~~~ package com.deppon.test03.model; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.junit.Assert; import org.junit.Test; import com.deppon.test03.entity.PersonEntity; import com.deppon.test03.util.HibernateUtil; public class ModelTest { @Test public void testGetSession() { Session session = HibernateUtil.getSession(); Assert.assertNotNull(session); HibernateUtil.closeSession(); } @Test public void testExport() { new SchemaExport(new Configuration().configure()).create(true , true); } @Test public void testSave() { PersonEntity person = new PersonEntity(); person.setId(100); person.setName("路飞"); Session session = HibernateUtil.getSession(); Transaction tx = session.beginTransaction(); session.save(person); tx.commit(); HibernateUtil.closeSession(); } @Test public void testQuery() { Session session = HibernateUtil.getSession(); session.beginTransaction(); @SuppressWarnings("unchecked") List personList = session.createQuery("select p from PersonEntity p").list(); for(PersonEntity eachPerson : personList) { System.out.println(eachPerson); } session.getTransaction().commit(); HibernateUtil.closeSession(); } } ~~~ 项目结构如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fbf4085.png) 对了,注意一下,在上面的pom.xml中,没有看到数据库驱动包,我用的是SQL Server,直接将jar包放到了项目的lib文件夹下,而从网上查的说,使用scope引入本地的包,试了一下,好像不行,等我再试一试。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fc1b3d5.png) ### 5. 测试 如果你现在运行JUnit测试的话,是不会成功的,昨天晚上就是这个原因,提示说找不到hibernate.cfg.xml, 后来发现,在target文件夹下,并没有生成class文件,配置文件也没有,这样当然运行不成功 这里需要执行两个命令 使用CMD窗口,进入当前项目的根目录: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fc3b26a.png) 第一条命令:输入mvn compile ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fc50a58.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fc67e25.png) 注意:这里一定要成功啊,即   BUILD SUCCESS 第二条命令:输入mvn test-compile ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fc7f901.png) 同样的,这里一定要 BUILD SUCCESS 这样的话,再一次运行测试程序,就可以成功了!![大笑](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-19_569e21abc5518.gif) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [Maven学习(一)- 环境搭建](http://blog.csdn.net/jolingogo/article/details/8775046) - [Maven学习(二)- 安装m2eclipse插件 ](http://blog.csdn.net/jolingogo/article/details/8796410) - [Maven学习(三)- 使用Maven构建Web项目](http://blog.csdn.net/jolingogo/article/details/8796726) - [Maven学习(四)- 使用Maven构建Web项目-测试](http://blog.csdn.net/jolingogo/article/details/8797153) - [Maven学习(五)- 使用Maven构建Struts2项目](http://blog.csdn.net/jolingogo/article/details/8798052) - [Maven学习(六)- 构建Hibernate项目](http://blog.csdn.net/jolingogo/article/details/8798684) - [Maven学习(七)- 构建Spring项目](http://blog.csdn.net/jolingogo/article/details/8799307) - [Maven学习(八)- 构建MyBatis项目](http://blog.csdn.net/jolingogo/article/details/8801158) - [Maven学习(九)- 构建SSH项目](http://blog.csdn.net/jolingogo/article/details/8811817) - [Maven学习(十) - 阶段小结 ](http://blog.csdn.net/jolingogo/article/details/8821375) - [专栏:Maven学习之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
';

(五)- 使用Maven构建Struts2项目

最后更新于:2022-04-01 20:44:48

在前两篇博客中,使用Maven构建了Web项目,在这篇博客中写一下,怎样构建一个简单的Struts2项目。 在准备过程中发现,要使用好Maven,个人觉得要好好利用这两个网站: [http://mvnrepository.com/](http://mvnrepository.com/) [http://search.maven.org/](http://search.maven.org/) 由于自己对Maven的理解不是非常深,所以学习的时候遇到很多简单的问题都没法解决![委屈](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-25_56a5a367bba9a.gif) ,走了很多弯路 ### 1. 新建一个基本的Web项目 这和前面讲的是一样的,可以参考前面的博客 ### 2. 添加Struts2依赖 这里主需要在pom.xml中添加一个struts-core的依赖即可: ~~~ 4.0.0 com.deppon.demo test02 war 0.0.1-SNAPSHOT test02 Maven Webapp http://maven.apache.org UTF-8 junit junit 3.8.1 test org.apache.struts struts2-core 2.3.1 test02 ~~~ 之后,Maven会自动从网上下载struts2需要的其他依赖包,可以看一下这里: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fbb0294.png) 是不是都有了,有的时候Maven可能会报错,由于网络的原因(个人认为大多是网络问题,导致下载依赖包出错![难过](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-18_569ca449b6adc.gif) ),可以从上面提到的两个网站手动下载 ### 3. 新建一个Action ~~~ package com.deppon.test02.action; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private static final long serialVersionUID = -1417237614181805435L; private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /** * 跳转到登录界面 * @return */ public String login_input() { return SUCCESS; } /** * 登录 * @return */ public String login() { System.out.println("name->" + name); System.out.println("password->" + password); return SUCCESS; } } ~~~ struts.xml ~~~ /login.jsp /login_success.jsp ~~~ web.xml ~~~ struts2 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter struts2 /* ~~~ index.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 主页 去登陆 ~~~ login.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 登录界面
name: password:
~~~ login_success.jsp ~~~ <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> 登录成功 ~~~ 项目结构如下图所示: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-09-06_57ce64fbcefb4.png) --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - [Maven学习(一)- 环境搭建](http://blog.csdn.net/jolingogo/article/details/8775046) - [Maven学习(二)- 安装m2eclipse插件 ](http://blog.csdn.net/jolingogo/article/details/8796410) - [Maven学习(三)- 使用Maven构建Web项目](http://blog.csdn.net/jolingogo/article/details/8796726) - [Maven学习(四)- 使用Maven构建Web项目-测试](http://blog.csdn.net/jolingogo/article/details/8797153) - [Maven学习(五)- 使用Maven构建Struts2项目](http://blog.csdn.net/jolingogo/article/details/8798052) - [Maven学习(六)- 构建Hibernate项目](http://blog.csdn.net/jolingogo/article/details/8798684) - [Maven学习(七)- 构建Spring项目](http://blog.csdn.net/jolingogo/article/details/8799307) - [Maven学习(八)- 构建MyBatis项目](http://blog.csdn.net/jolingogo/article/details/8801158) - [Maven学习(九)- 构建SSH项目](http://blog.csdn.net/jolingogo/article/details/8811817) - [Maven学习(十) - 阶段小结 ](http://blog.csdn.net/jolingogo/article/details/8821375) - [专栏:Maven学习之旅](http://blog.csdn.net/column/details/yuguiyang-maven.html)
';