通向架构师的道路(第二十三天)maven与ant的奇妙整合
Maven+Hubson持续集成建置总结

Maven+Hubson持续集成建置总结制作人:刘松最后修改日期:2010/7/17版本:v0.1一.Q&A1.如果需要引用的jar包在repository中找不到怎么办?答:比如ms sql的jdbc,在官方的repository中是找不到的。
这时可以在将这些jar下载下来,加入内网用来做mirror的nexus的第三方组件库中(third party)。
在nexus页面中repository->third part->upload artifact中。
上传到第三方组件库时注意Classifier的填写,这个是将加在你上传的Jar包的名字当中,作为和其他同名组件的一个区分,以便于maven能找到在哪里下载它。
比如ojdbc14,在官方repository中只提供了一个pom而没有jar,这时可以将ojdbc14上传到第三方组件库中,指定classifier为local,这样在dependcy中,加上<classifier>local</classifier>,这样maven就能在内网的nexus中找到它。
2.如果Eclipse的Libraries中出现如下图所示错误怎么办?答:这是因为工程用到的dependcy中有struts2-core,它依赖于tools.jar,于是在libraries中自动添加了tools.jar的依赖。
如果添加struts-core时,缺乏一些环境配置,eclipse就会自动到eclipse工作的jre中找tools.jar,出现tools.jar找不到的错误(提示Missing artifact com.sun:tools:jar:1.5.0:system的错误,同时libraries中显示tools.jar missing)。
要解决这个问题,(1).首先要注释掉对于struts2-core的引用,(2)一种方法是,在eclipse.ini中增加-vm "<jdk home>\bin"的启动参数(3)或者另一种方法,在path中增加<jdk home>\bin到path最前面(4)启动eclipse(5)取消struts2-core引用的注释,保存即可消除错误。
ssh下基于junit测试出现的延迟加载的解决方案

ssh下基于junit测试出现的延迟加载的解决方案篇一:ssh框架常见错误与解决方法not Found Exception 异常.---->解决方法:在lib中加入两个jar包(与struts2- );2.使用hql语句时出现(即使用hql回调函数带参数时) 或者是()I异常---->解决方法:(()I异常XX-04-06 14:56:57| 分类: java编程 | 标签:antlr jar collections ast getline |字号大中小订阅我用的,装在 D:\\,SSH组合完成后,执行hibernate 的HQL查询时,报错:: ()I看来是antlr这个语法解析包出错因为Struts自带的,比自带的的版本要低,故要删除前一个低版本的,,和都带有 ,,,下面我要把它们都清除了,由于myeclipse 添加的struts性能不是放在工程lib下的,而是myeclipse自带的,,所以删除比较麻烦,,我觉得最简单的做法应该是这样:D:\\\configuration\\bundles 下搜索完成后能看到的,都删除掉,,(可能有些是在下面的,有些是在下面的) 然后在 D:\\Common\plugins 搜索 *struts*.jar 会发现,出来三个选中一个文件,,打开方式选择压缩包,,我的winRAR 的,_ 在lib下和data\下要删除(这个是删除里面的)而再打开 _ data\\core 下删除 (这个是里面的)好了,,这个就从和中移除了,,因为这两个jar是common目录下的,所以删除了后,再运行myeclipse后,myeclipse就不能再从这两个包中找并加载了注意:如果程序已经运行过,则同时需要删除TOMCAT 下的)3.(使用JSONObject与JSONArray时出现的问题)程序运行到 JSONObject j=(map) 这部分后就没反应了,无任何异常抛出---->解决方法:(本文来自:blog_这句话前面和后面都加上了打印信息,运行结果是前面有打印,后面没有打印,也没有任何异常抛出,就这么莫名其妙的断掉了。
maven build.plugins继承及执行逻辑 -回复

maven build.plugins继承及执行逻辑-回复maven build.plugins继承及执行逻辑。
Maven是一种开源的项目管理工具,它通过一个项目对象模型(Project Object Model,简称POM)来管理项目的构建、报告和文档等方面。
在Maven中,pom.xml文件包含了构建项目所需的配置信息,其中的build.plugins元素用于定义构建过程中使用的插件。
插件是Maven中的一个重要概念,它们提供了各种功能来帮助我们构建项目,比如编译代码,生成文档,运行测试等。
Maven中有很多内置的插件,同时我们也可以通过自定义插件来扩展Maven的功能。
在Maven中,pom.xml文件可以继承其他pom.xml文件的配置,通过这种方式,我们可以在多个项目中共享和重用一些通用的配置。
build.plugins元素也不例外,它可以继承其他父级pom.xml文件中的插件配置。
首先,我们来看如何继承父级pom.xml文件中build.plugins元素的配置。
在子级pom.xml文件中,我们可以使用<pluginManagement>元素来引用父级pom.xml文件中的插件配置。
通过这种方式,我们可以在子级pom.xml文件中省略一些常用插件的配置,从而减少冗余。
例如,在父级pom.xml文件中,我们希望使用一个名为"maven-compiler-plugin"的插件来编译Java代码,配置如下:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>然后,在子级pom.xml文件中,我们可以使用<pluginManagement>元素来引用父级pom.xml文件中的插件配置,如下所示:<build><pluginManagement><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></pluginManagement></build>通过上述配置,子级pom.xml文件中的"maven-compiler-plugin"插件将继承父级pom.xml文件中的配置。
ant指令详解2篇

ant指令详解2篇ant指令详解第一篇Ant(Another Neat Tool)是一款基于Java的构建工具,广泛用于自动化构建和部署Java应用程序。
它的诞生源于Apache软件基金会,可以帮助开发人员轻松地编译、打包和部署项目。
本文将详细介绍Ant指令的使用和功能。
Ant指令是Ant构建脚本中的命令行指令,用于定义构建流程、编译代码、打包文件等操作。
Ant采用XML格式的构建文件,将一组Ant指令按照特定的顺序组织起来,通过执行构建文件,可以自动完成一系列构建任务。
首先,让我们来了解一些常用的Ant指令。
首先是javac指令,用于将Java源代码编译成Java字节码文件。
示例代码如下:```xml<javac srcdir="./src" destdir="./bin"includeantruntime="false" />```上述指令将src目录下的Java源代码编译成字节码文件,并将生成的字节码文件存放在bin目录下。
接下来是jar指令,用于创建Java程序的可执行JAR文件。
示例代码如下:```xml<jar destfile="./dist/myapp.jar"><fileset dir="./bin" includes="**/*.class" /><fileset dir="./lib" includes="**/*.jar" /></jar>```上述指令将bin目录下的所有类文件和lib目录下的所有JAR文件打包成一个名为myapp.jar的JAR文件,并将其存放在dist目录下。
除了编译和打包,Ant还提供了许多其他有用的指令。
例如,copy指令可以用来复制文件或目录:```xml<copy file="./src/test.txt" todir="./dist" />```上述指令将src目录下的test.txt文件复制到dist目录下。
ant项目的基本结构 -回复

ant项目的基本结构-回复Ant项目的基本结构是指一个基于Apache Ant构建的项目的组织和布局。
Apache Ant是一种基于Java的构建工具,它使用XML文件来描述构建过程,可以管理项目的编译、测试、打包和部署等任务。
在本文中,我们将分步介绍Ant项目的基本结构以及每个部分的作用和功能。
一、项目根目录Ant项目的根目录是项目的主文件夹,通常包含项目的基本配置文件以及其他的子目录和文件。
可以将项目根目录命名为任何你喜欢的名称,但是建议使用小写字母和短划线来命名,以保持一致性和易读性。
二、build.xml文件在项目根目录下,最重要的文件是build.xml。
这个文件是Ant的主要配置文件,它用于描述项目的构建过程。
build.xml文件是一个XML文档,包含一系列的任务和目标,用于定义项目的编译、测试、打包和部署等操作。
build.xml文件通常定义了一些基本的构建任务,如编译源代码、运行单元测试、打包构建结果等。
你可以根据项目的需要修改和定制build.xml文件,添加或移除特定的任务和目标。
三、目录结构Ant项目的目录结构可以根据具体需求进行灵活调整,但是通常包含以下几个常见的目录:1. src目录:用于存放项目的源代码文件。
通常会按照不同的编程语言或模块进行划分,如Java源代码文件放在src/main/java目录下,测试代码文件放在src/test/java目录下。
2. lib目录:用于存放项目所依赖的外部Jar包文件。
这些Jar包可以在项目构建过程中被自动导入和编译。
3. bin目录:用于存放项目的编译输出目录,包括编译后的类文件、资源文件和其他打包结果。
通常会有一个与编码语言相关的子目录,如bin/java。
4. test目录:用于存放项目的测试文件,包括单元测试和集成测试。
通常会按照不同的测试类型和模块进行划分。
5. doc目录:用于存放项目的文档和说明文件。
这些文件可以包括项目的需求说明、设计文档、API文档、用户手册等。
maven面试题

maven面试题Maven是一个流行的项目管理工具,常常在软件开发中使用。
对于那些正在寻找软件开发工作的人来说,熟悉Maven并能够回答相关面试题是非常重要的。
以下是一些常见的Maven面试题及其答案。
问题一:请介绍一下Maven的基本概念和作用。
答:Maven是一个基于项目对象模型(POM)的项目管理工具。
它负责项目构建、依赖管理和项目信息管理。
Maven的核心概念包括坐标、依赖关系和生命周期。
坐标用于唯一标识项目,依赖关系用于管理项目所需的外部依赖,而生命周期定义了构建过程中的不同阶段。
问题二:Maven的生命周期包括哪些阶段?答:Maven的生命周期包括三个主要的阶段:clean、default和site。
clean阶段负责清理构建过程中产生的临时文件和目录;default阶段负责实际的构建过程,其中包括编译、测试、打包等;site阶段负责生成项目的站点文档。
问题三:Maven的仓库有哪几种类型?答:Maven的仓库分为本地仓库和远程仓库两种类型。
本地仓库位于本地开发者的机器上,用于存储和管理项目的依赖。
远程仓库位于网络上,可以通过配置文件指定,用于下载项目的依赖。
问题四:如何创建一个Maven项目?答:可以通过使用Maven的命令行工具或者通过IDE(如Eclipse、IntelliJ IDEA等)来创建一个Maven项目。
使用命令行工具时,可以通过执行`mvn archetype:generate`命令,并选择对应的项目模板来创建项目。
问题五:如何管理项目的依赖?答:Maven使用POM文件来管理项目的依赖。
POM文件是一个XML文件,其中包含项目的基本信息和依赖信息。
在POM文件中,可以通过<dependencies>元素来声明项目所需的依赖,并指定对应的坐标和版本号。
问题六:Maven的插件是什么?答:Maven的插件是用于扩展Maven功能的工具。
插件可以在Maven构建的不同阶段执行特定的任务。
maven依赖传递及如何解决maven的jar包冲突

maven依赖传递及如何解决maven的jar包冲突Maven是一款著名的Java构建工具,以其自动化管理依赖、简化构建流程、统一项目规范等特点广受开发者的欢迎。
在Maven中,依赖传递是其重要的特性之一,本文将详细介绍Maven依赖传递的原理以及如何解决Maven的jar包冲突。
一、Maven依赖传递Maven项目中的依赖通常以pom.xml中的<dependency>标签来声明,<dependency>标签中指定了所依赖的groupId、artifactId 和version等元素。
Maven通过依赖传递机制,将所声明的依赖自动传递到当前项目中,从而构建出一个完整的、包含了所有依赖的项目。
Maven的依赖传递分为两种:直接依赖和间接依赖。
直接依赖是指在当前项目中直接声明的依赖,而间接依赖则是在直接依赖中又依赖的库。
具体来讲,就是假如项目A依赖项目B,而项目B又依赖项目C,则项目C就是A的间接依赖。
Maven会自动将B的依赖传递给A,从而实现C的传递。
这种传递机制可以极大地简化开发者的工作量,方便项目的维护和升级。
二、Maven的jar包冲突然而,Maven的依赖传递机制也存在一些问题,最常见的就是jar包冲突。
假设我们的项目需要两个不同的库,A和B,但A和B所依赖的jar包互相冲突,这时候就会出现问题。
具体来说,就是两个不同的jar包都定义了同一个类,Maven在传递依赖时,它会使用第一个遇到的冲突jar包,而丢弃掉其他的冲突jar包,这样就会导致某些功能无法实现或出现异常。
三、Maven解决jar包冲突的方法Maven提供了一些方法来解决jar包冲突问题。
1.用exclusions排除不需要的依赖在pom.xml中,可以使用exclusions标签来排除不需要的依赖,如下所示:```<dependencies><dependency><groupId>com.group</groupId><artifactId>artifact1</artifactId><version>1.0.0</version><exclusions><exclusion><groupId>com.excluded.group</groupId><artifactId>excluded-artifact</artifactId></exclusion></exclusions></dependency></dependencies>```使用exclusions标签可以排除掉特定的jar包,从而避免冲突。
ant指令详解

Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。
在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。
一.安装与配置下载地址:/,在本文中下载的是1.7.0版本。
解压到某个目录(例如E:"apache-ant-1.7.0),即可使用。
添加系统环境变量:ANT_HOME,该变量指向Ant解压后的根目录,在此为E:"apache-a nt-1.7.0。
安装与配置完毕后,读者可以测试一下Ant是否可用,首先进入Ant的bin目录,运行命令ant –version,若安装和配置成功,则会显示Ant版本信息,如下图所示:由上可以看出,读者运行Ant的命令时,需要进入到Ant的bin目录,如何才能让系统自动找到Ant呢?这时需要读者在系统环境变量path中添加Ant的bin目录。
设置完成后,我们就可以在任何目录(例如C:"Documents and Settings"AmigoXie目录)输入Ant的命令,来获得命令的运行结果。
二.Ant的关键元素Ant的构件文件是基于XML编写的,默认名称为build.xml。
为了更清楚的了解Ant,在这里编写一个简单的Ant程序,用来展现Ant的功能,让读者对Ant有一个初步的了解。
首先在E盘下建立一个build.xml文件,内容如下:<?xml version="1.0"?><project name="helloWorld"><target name="sayHelloWorld"><echo message="Hello,Amigo"/></target></project>读者可以进入E盘,然后运行ant sayHelloWorld,可以看到如下的运行结果:其中sayHelloWorld为需要执行的任务的名称。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分类:架构师之路目录(?)[+]CSDN学院讲师招募,诚邀您加入!博客Markdown编辑器上线啦PMBOK第五版精讲视频教程火星人敏捷开发1001问通向架构师的道路(第二十三天)maven与ant的奇妙整合2012-11-19 12:0420673人阅读评论(32)收藏举报ant eclipse Eclipse maven Maven ssh SSH SSh整合一、前言我们在《万能框架spring》前四天中都用到了maven,接下去要讲述在SSX这样的架构下我们的“单元测试”是怎么进行的,但是在此之前我们再来深入入解一下maven,因为我们的单元测试需要用到的是junit+ant+junitreport这样的组合。
而。
由于我们已经使用了maven,那么我们如何可以延续经典的junit+ant这样的单元测试的组合呢?其答案就是把maven和ant再进行组合一下。
二、用Maven任务在Ant中使用Maven依赖Maven的一个重要特性是使用中央仓库,存储依赖和识别应用程序所需的库。
Maven2还支持传递依赖(transitivedependency),这是一个强大的概念,它将用户需要声明的依赖限制到最小程度。
Ant不支持“即开即用”的依赖管理。
在Ant项目中,应用程序所需的全部程序库通常都存放在一个项目目录中。
三、使用maven-ant-task3.1安装maven-ant-task我们先下载maven-ant-tasks-2.1.3.jar(我也已经上传到了“我的资源”里了);下载完后把它放到我们的ant的lib目录下;3.2 打包工程这是一个传统的没有使用maven依赖库的ant的打包流程,从图上看很清晰,对吧?在前面说了,ant打包时是需要所有的.jar文件都是事先已经在工程的WebContent/WEB-INF/lib目录下了,这也是大都数人所熟悉的。
但是Maven打包,就一个包依赖声明文件pom.xml,然后在打包时缺什么jarMaven会自动帮我们去下载,所以说原创:转载:译文:评论:个人资料红肠啃僵尸访问:积分:等级:排名:文章搜索博客专栏think in javainterview文章:12篇阅读:126219架构师修练之道文章:45篇阅读:1012191文章分类架构师之路随笔面经文章存档2015年03月2015年02月目录视图摘要视图订阅lifetragedy的专栏吾以吾血荐我中华之IT登录 | 注册1212560次10345第539名68篇0篇0篇1954条(36)(1)(12)(1)(3)Maven 真是一个好东西,使用maven-ant-task 我们可以把“声明classpath ”这块来用maven-ant-task 来做,即其它还是使用ant ,就是在声明编译时即javac 时需要用到的那些依赖包时再使用maven 的特性。
因此,我们再来看上述这个纯ant 工程打包流程在引入了maven-ant-task 后会变成什么样子吧。
四、动手改造工程我们此处以myssh2的工程来做例子,原来的pom.xml 文件不动,增加ant 的打包文件即build.xml 文件。
4.1maven 环境的重设置我们前面的几天教程用的都是一个叫maveneclipse(m2 eclipse)的插件它默认会把所有的maven 依赖库下载到你的C:\Users\yourusername\.m2\repository 这个目录下(以win7为例,如果你用的是XP 那么这个目录应该在你的c:\documents and settings 目录下),因此我们需要手动把我们的maven 安装目录的下的conf\目录下的settings.xml 文件也拷贝到展开2014年01月2013年12月2013年10月阅读排行通向架构师的道路(第一天Apache 整合Tomcat通向架构师的道路(第四天Tomcat 性能调优-让小猫飞奔5天学会jaxws-webservice 编程第一天通向架构师的道路(第二天apache tomcat https 应用通向架构师的道路(第三天apache 性能调优通向架构师的道路(第五天tomcat 集群-群猫乱舞通向架构师的道路(第六天通向架构师的道路(第七天ThreadLocal 改进你的层次的划分通向架构师的道路(第八天weblogic 与apache 的整合与调优通向架构师的道路(第十天Axis2 Web Service(一)评论排行通向架构师的道路(第一天Apache 整合Tomcat 我的架构师历程,其实一切(下)通向架构师的道路(第七天ThreadLocal 改进你的层次的划分通向架构师的道路(第十八Spring(一)通向架构师的道路(第二天apache tomcat https 应用通向架构师的道路(第五天tomcat 集群-群猫乱舞通向架构师的道路(第四天Tomcat 性能调优-让小猫飞奔5天学会jaxws-webservice 编程第一天think in java interview-高级开发人员面试宝典(二)通向架构师的道路(第十四Axis2 Web Service 安全之rampart推荐文章* 【ShaderToy】开篇* FFmpeg源代码简单分析:avio_open2()* 技能树之旅: 从模块分离到测试* Qt5官方demo解析集36——Wiggly Example* Unity3d HDR和Bloom效果(高动态范围图像和泛光)* Android的Google官方设计指南(上)(1)(4)(2)(111488)(66415)(61084)(57202)(52385)(49834)(38355)(33367)(32885)(32750)(211)(135)(119)(99)(94)(75)(73)(71)(62)(55)C:\Users\yourusername\.m2\repository目录下,还记得吗?现在,我们在我们的apache-maven的安装目录即c:\maven目录下建立我们的repository,并且让m2eclipse插件也将repository指向C:\maven\repository。
更改c:\maven\conf\settings.xml文件我们在原有的settings.xml文件中增加了如下的一段话<localRepository>C:\maven\repository</localRepository>然后回到eclipse点开window->preference->Maven->UserSettings,将我们的m2eclipse的设置配置成如下的样子注意:Local Repository再也不是“C:\Users\yourusername\.m2\repository”了,而是指向了我们的c:\maven\repository目录了。
这样做还有一个好处就是你在重新装机时你的maven的local repository不会因为documents and settings目录的丢失而丢失了。
4.2编写build.xmlbuild.properties文件# antappName=myssh2webAppName=myssh2webAppQAName=myssh2-UTlocal.dir=C:/eclipsespace/${appName}src.dir=${local.dir}/src/main/javadist.dir=${local.dir}/distwebroot.dir=${local.dir}/src/main/webapplib.dir=${local.dir}/libclasses.dir=${webroot.dir}/WEB-INF/classesresources.dir=${local.dir}/src/main/resources请注意此处的${}这样的placeholder(替换符)的使用技巧build.xml文件(红色加粗部分)<?xml version="1.0" encoding="UTF-8"?><project name="myssh2" default="buildwar" xmlns:artifact="urn:maven-artifact-ant"><property file="build.properties" /><path id="maven-ant-tasks.classpath" path="C:/ant/lib/maven-ant-tasks-2.1.3.jar" /><typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" /> <artifact:pom id="maven.project" file="pom.xml" /><artifact:dependencies filesetId="pile" useScope="compile"><!--<pom file="pom.xml"/>--><pom refid="maven.project" /></artifact:dependencies><path id="compile.classpath"><fileset dir="${lib.dir}"><include name="*.jar" /></fileset></path><target name="clean" description="Delete old build and dist directories"><delete dir="${dist.dir}" /><mkdir dir="${dist.dir}" /><mkdir dir="${dist.dir}/${webAppName}" /><mkdir dir="${dist.dir}/${webAppName}/WEB-INF" /><mkdir dir="${dist.dir}/${webAppName}/WEB-INF/lib" /><mkdir dir="${dist.dir}/${webAppName}/WEB-INF/classes" /><mkdir dir="${dist.dir}/${webAppName}/css" /><mkdir dir="${dist.dir}/${webAppName}/images" /><mkdir dir="${dist.dir}/${webAppName}/jsp" /></target><target name="download-libs" depends="clean"><copy todir="${lib.dir}"><fileset refid="pile" /><mapper type="flatten" /></copy></target><target name="compile" description="Compile java sources" depends="download-libs"> <javac debug="true" destdir="${dist.dir}/${webAppName}/WEB-INF/classes"includeAntRuntime="false"srcdir="${src.dir}"><classpath refid="compile.classpath" /></javac><copy todir="${dist.dir}/${webAppName}/WEB-INF/lib"><fileset dir="${lib.dir}"><include name="*.jar" /></fileset></copy><copy todir="${dist.dir}/${webAppName}/WEB-INF/classes"><fileset dir="${resources.dir}"><include name="**/*.*" /></fileset></copy><copy todir="${dist.dir}/${webAppName}/css"><fileset dir="${webroot.dir}/css"><include name="**/*.*" /></fileset></copy><copy todir="${dist.dir}/${webAppName}/images"><fileset dir="${webroot.dir}/images"><include name="**/*.*" /></fileset></copy><copy todir="${dist.dir}/${webAppName}/jsp"><fileset dir="${webroot.dir}/jsp"><include name="**/*.*" /></fileset></copy><copy todir="${dist.dir}/${webAppName}"><fileset dir="${webroot.dir}"><include name="*.*" /></fileset></copy><copy todir="${dist.dir}/${webAppName}/WEB-INF"><fileset dir="${webroot.dir}/WEB-INF"><include name="*.*" /></fileset></copy></target><target name="buildwar" depends="compile"><war warfile="${dist.dir}/${webAppName}.war"><fileset dir="${dist.dir}/${webAppName}"/></war></target></project>对照着Maven+Ant打包的流程图看这个build.xml文件,一点也不难看懂,就一个过程化的批处理脚本而己。