- 浏览: 370196 次
- 性别:
- 来自: 西安
文章分类
最新评论
-
jiangli19192:
...
自己写的一个启动JBoss服务器的bat批处理 -
56553655:
最好这样:java -Xms3700M -Xmx3700M - ...
测试本机JVM支持的最大内存 -
lizhiy05:
学习一哈……
Web Services体系结构及相关概念 -
ghy200692162:
System.out.println("开始注册Js ...
基于OSGi的JSF Web组件开发问题求解 -
xiao888lin:
你的头像看起来很像我们宿舍老四。。。
测试本机JVM支持的最大内存
正如我在“用Velocity进行配置文件信息的集中管理 ”————http://danlley.iteye.com/blog/106130 中的许诺,这个专题将专门说说如何在Maven2插件中用Velocity对配置文件的集中管理。有了上个专题的基础,我这里也就化繁就简了。下面这段代码是通过上个专题的例子进行改写、整理、重构以后的代码,核心任务就是处理配置文件。
- public class VelocitySamples{
- private VelocityContext context;
- /**
- *
comments : 程序入口
- *
- * author danlley
- * coding date 2007-7-24
- * @param path 资源文件路径,默认与Maven默认资源文件路径相同
- * @param template 资源仓库
- * @param destPath 目标路径,默认与Maven编译路径相同
- * @throws Exception
- */
- public void dealFile(String path,String template,String destPath) throws Exception{
- File[] files=new File(path).listFiles();
- String errMsg="请核对路径: "+path+" 确认是否有资源文件存在于此路径下.";
- if(files.length==0)
- throw new FileNotFoundException(errMsg);
- context=new VelocityContext();
- applyProperties(path+template);//initial the VelocityContext
- Velocity.init();
- for(File file:files){
- if(!file.isFile())
- continue;
- String origName=file.getName();
- if(!checkFile(origName))
- continue;
- createFile(origName,destPath,path);
- }
- }
- /**
- *
comments : 此方法用于检查文件是否为待处理文件,在本例子中待处理文件的后缀均为“*.danlley”
- * 如:log4j配置文件则为log4j.xml.danlley,转换后为log4j.xml
- *
- * author danlley
- * coding date 2007-8-6
- * @param origName
- * @return
- * @throws Exception
- */
- public boolean checkFile(String origName)throws Exception{
- int index=origName.lastIndexOf(".");
- String tail=origName.substring(index+1,origName.length());
- if("danlley".equals(tail))
- return true;
- else
- return false;
- }
- /**
- *
comments : 生成转换后的文件
- *
- * author danlley
- * coding date 2007-7-24
- * @param origFileName
- * @param destPath
- * @param targetPath
- * @throws Exception
- */
- public void createFile(String origFileName,String destPath,String targetPath) throws Exception{
- int index=origFileName.lastIndexOf(".");
- String destFileName=origFileName.substring(0,index);
- BufferedWriter writer=new BufferedWriter(new FileWriter(destPath+destFileName));
- Template template=Velocity.getTemplate(targetPath+origFileName);
- template.merge(context,writer);
- writer.flush();
- writer.close();
- }
- /**
- *
comments : 为 VelocityContext 获取替换信息
- *
- * author danlley
- * coding date 2007-7-24
- * @param path
- * @throws Exception
- */
- public void applyProperties(String path) throws Exception{
- FileInputStream fis=new FileInputStream(path);
- if(null==fis)throw new NullPointerException("broken file or bad file!");
- Properties prop=new Properties();
- prop.load(fis);
- Enumeration enu=prop.keys();
- while(enu.hasMoreElements()){
- String key=enu.nextElement().toString();
- String value=prop.get(key).toString();
- context.put(key,value);
- }
- }
- }
既然是Maven插件开发,那我这里也就用Maven来管理工程了,下面是POM的配置祥单:
- <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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0modelVersion>
- <groupId>org.danlleygroupId>
- <artifactId>maven-velocity-pluginartifactId>
- <packaging>maven-pluginpackaging>
- <version>1.0version>
- <name>maven-velocity-pluginname>
- <url>http://maven.apache.orgurl>
- <build>
- <plugins>
- <!---->
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <configuration>
- <source>1.5source>
- <target>1.5target>
- configuration>
- plugin>
- plugins>
- build>
- <dependencies>
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.0version>
- <scope>testscope>
- dependency>
- <dependency>
- <groupId>velocitygroupId>
- <artifactId>velocityartifactId>
- <version>1.4version>
- dependency>
- <dependency>
- <groupId>org.apache.mavengroupId>
- <artifactId>maven-plugin-apiartifactId>
- <version>2.0version>
- dependency>
- dependencies>
- project>
让我不解的是Maven在进行代码编译时采用的还是Older Pattern,但是我的代码又用到了一些JDK5的某些特性,万般无赖,我只好用下面的方式进行显式申明了:
- <!---->
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <configuration>
- <source>1.5source>
- <target>1.5target>
- configuration>
- plugin>
还需要强调的一点是下面这段代码,我这里没有用jar也没有用war,因为我写的不是资源包,而是插件:
- <packaging>maven-pluginpackaging>
接下来在src/main/scripts路径下定义文件velocity.mojos.xml。内容如下:
- <pluginMetadata>
- <mojos>
- <mojo>
- <goal>velocitygoal>
- <call>velocitycall>
- <description>Say Hello, World.description>
- mojo>
- mojos>
- pluginMetadata>
Maven 官方的说明中好像说mojo的文件命名必须与goal一致,因此,由于我的goal是velocity,那mojo也就成了velocity.mojos.xml。当然至于这个goal到最后回去call什么东西,其实这里并不是很重要了,只要在使用plugin的工程中声明你需要call什么东西就可以了。如果大家对Maven插件开发比较感兴趣,可以到http://danlley.iteye.com/blog/102159去看看我的另外一片专题文章,希望对大家能够有所帮助。有了这篇文章做基础,我下面也就省去部分Maven相关的概念,直接给出我实现的钩子程序了(需要说明的一点是,在下面的这段程序中,注释和代码同样重要)。
- package org.danlley.util.samples;
- import java.io.File;
- import org.apache.maven.plugin.AbstractMojo;
- import org.apache.maven.plugin.MojoExecutionException;
- /**
- * replace.
- *
- * @goal replace
- */
- public class VelocityMojo extends AbstractMojo {
- /**
- * scriptSourceDirectory.
- *
- * @parameter default-value="${project.build.scriptSourceDirectory}"
- */
- private String scriptSourceDirectory;
- /**
- * outputDirectory.
- *
- * @parameter default-value="${project.build.outputDirectory}"
- */
- private String outputDirectory;
- /**
- * template.
- *
- * @parameter default-value="${project.build.outputDirectory}"
- */
- private String template;
- public void execute() throws MojoExecutionException {
- try {
- getLog().info("+-----------------------------------------+");
- getLog().info("| Velocity Files: |");
- getLog().info("+-----------------------------------------+");
- listFile();
- VelocitySamples _instance = new VelocitySamples();
- _instance.dealFile(scriptSourceDirectory + "/", template, outputDirectory + "/");
- getLog().info("生成文件已经被放置在路径:"+outputDirectory+" 请核对!");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- *
comments : 只会列出需要处理的文件
- *
- * author danlley
- * coding date 2007-8-6
- * @throws Exception
- */
- public void listFile() throws Exception {
- File[] files = (new File(scriptSourceDirectory)).listFiles();
- for (File file : files) {
- VelocitySamples ve = new VelocitySamples();
- if (ve.checkFile(file.getName())) {
- getLog().info(file.getName());
- }
- }
- }
- }
接下来进行install,接受到 BUILD SUCCESSFUL消息意味着插件开发过程结束,下面说说使用。在需要使用该插件的Maven2工程中打开POM,加入如下代码:
- <build>
- <plugins>
- <plugin>
- <groupId>org.danlleygroupId>
- <artifactId>maven-velocity-pluginartifactId>
- <version>1.0version>
- <configuration>
- <template>sample_data.propertiestemplate>
- configuration>
- <executions>
- <execution>
- <phase>compilephase>
- <goals>
- <goal>replacegoal>
- goals>
- execution>
- executions>
- plugin>
- plugins>
- build>
加入工程以后我的测试执行结果如下:
F:\workspaces\maven-velocity-lab>mvn compile
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------------
---
[INFO] Building maven-velocity-lab
[INFO] task-segment: [compile]
[INFO] -------------------------------------------------------------------------
---
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [velocity:replace {execution: default}]
[INFO] +-----------------------------------------+
[INFO] | Velocity Files: |
[INFO] +-----------------------------------------+
[INFO] dlmchibernate.cfg.xml.danlley
[INFO] log4j.xml.danlley
[INFO] dlhibernate.cfg.xml.danlley
[INFO] download_config.xml.danlley
[INFO] 生成文件已经被放置在路径:F:\workspaces\maven-velocity-lab\target\classes
请核对!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Mon Aug 06 16:38:58 CST 2007
[INFO] Final Memory: 5M/9M
[INFO] ------------------------------------------------------------------------
参考资料:http://maven.apache.org/guides/plugin/guide-java-plugin-development.html
发表评论
-
GIT使用批处理完成日常代码管理
2017-03-26 22:01 1271本文默认读者的本机是已经安装好了GIT本地端,因此对于GI ... -
用Velocity进行配置文件信息的集中管理
2007-07-27 16:02 4630Apache从他诞生的那天起 ... -
测试驱动开发与EasyMock的使用
2007-07-17 22:19 1953测试驱动开发并不是什 ... -
在工程POM中内嵌Ant脚本
2007-07-17 22:14 1769由于每篇文章的字数有限制,我没办法在同一个专题中同时将相关的问 ... -
Maven2插件开发详解
2007-07-17 22:11 8975在Maven2强大功能的魅力 ... -
用Emma的Eclipse插件进行代码覆盖率测试
2007-07-17 22:00 6895如上一个关于Cobertura的专题所说,我这里单开一个专题来 ... -
用Cobertura在Maven命令行进行覆盖测试
2007-07-17 21:58 9042Cobertura是一个基于jcovera ... -
ant中使用cobertura分析测试用例的代码覆盖率
2007-07-17 21:48 4602这次还是配置问题,接上上次关于ant脚本模板的详细说明。对于一 ... -
我写的ant编译、打包、测试、测试报告生成和邮件发送模板
2007-07-17 21:40 4966js 代码 <?xml ve ... -
XFire使用举例
2007-07-17 21:32 2431闲来无事,顺便写个XFire的小例子,也算是打发时间了,o( ... -
Maven入门--较复杂的实例
2007-07-17 21:19 1641本文将使用一个较复杂的实例,讲述如何定制目录布局(即不使用M ... -
Maven入门--概念与实例
2007-07-17 21:15 1367Maven入门--概念与实例 最近由于工作原因在研 ... -
设计模式总结
2007-07-17 17:14 628设计模式 1) 控制倒置模式: 说到控制倒置模式,就不得不 ... -
Eclipse中常用快捷键总结
2007-07-17 16:57 1178Eclipse中常用快捷键总结: CTRL+SHI ... -
修改eclipse中的默认maven2资源仓库保存地址
2007-07-17 16:56 5848当你在eclipse中集成了maven2后,默认情况下,ecl ... -
用ant进行工程管理
2007-07-17 13:50 21441.典型地,一个ant工程脚本如下: < ... -
利用maven2为工程的jar文件内部打入版本信息
2007-07-17 13:42 17601.修改pom.xml文件,在proj ... -
比ant更强大的工具maven2之自动生成工程
2007-07-17 13:38 2953maven2是在ant的基础上发展起来的,并对ant的功能进行 ... -
OFBIZ开源电子商务学习心得
2007-07-17 13:36 2565看懂在APACHE网站上的英文文档确实是一项不小的挑战,下面说 ... -
开始每个模块功能编写时需要做的事情总结
2007-07-17 13:20 11181.对查询出的展示列表进行排序 2.检查SQL语句,并思 ...
相关推荐
当Eclipse集成Maven2插件后,开发者可以在IDE内直接编辑POM.xml,插件会根据配置自动下载和管理所需的依赖库,避免了手动下载和配置库文件的繁琐工作。 Eclipse Maven2插件的主要功能包括: 1. **依赖管理**:插件...
2. **配置Velocity插件**:Maven有许多插件可以帮助处理Velocity模板,例如`velocity-maven-plugin`。在`pom.xml`的`build`部分,配置这个插件,指定模板目录、输出目录和模板引擎的其他设置。 3. **编写Velocity...
springMVC架构,maven , velocity , 数据源配置在项目中(springMVC的配置文件中)。
在提供的压缩包文件名称"0.10.2.20100623-1649"中,我们可以推测这是m2maven插件的一个特定版本,发布于2010年6月23日,具体版本号可能是0.10.2,这表明m2maven插件在较早的时候就已经存在,并且持续更新以适应不断...
2. `lib/`:存放了Maven运行所需的JAR文件,包括Maven核心库和其他依赖。 3. `conf/`:包含`settings.xml`文件,这是用户级的Maven配置文件,可以设置本地仓库位置、代理服务器、镜像等。 4. `LICENSE`和`NOTICE`...
Maven是一个流行的Java项目管理工具,它使用一个名为settings.xml的配置文件来配置Maven的行为。settings.xml文件包含了Maven的全局设置,包括仓库位置、代理设置、构建配置等。 在Maven中,settings.xml文件通常...
在Eclipse中,我们需要安装M2E(Maven Integration for Eclipse)插件,它可以帮助我们直接在IDE中管理和构建Maven项目。通过离线包,我们可以避免在线安装插件时可能出现的网络问题。 配置Eclipse与Maven的步骤...
Eclipse是一款广受欢迎的Java开发集成环境,而Maven则是一个强大的项目管理和构建工具...通过配置Windows的Maven环境和在Eclipse中进行离线安装,我们可以确保开发过程中对Maven的正常使用,实现项目的高效管理和构建。
在本主题中,我们将深入探讨Maven如何管理和组织SSM项目的配置文件,以及这些配置文件的主要功能。 1. Maven项目结构与配置: Maven是一个强大的构建工具,它通过一个统一的项目对象模型(Project Object Model, ...
现在eclipse的社区版都不内置maven插件了,站点在线安装实在是太痛苦了(我装了6个小时),于是急于寻找一种离线安装的办法,可是在网上又找不到对应的m2e包(我用的eclipse4.7),于是我决定将站点下的文件(很多)...
Maven-Helper 插件是 IntelliJ IDEA 中的一款功能强大且实用的插件,旨在帮助开发者更好地管理 Maven 项目的依赖关系。下面是 Maven-Helper 插件的主要知识点: 1. 依赖关系查看:Maven-Helper 插件提供了一个简洁...
Maven原版settings.xml配置文件,根据个人需要,可以打开对应注释或替换相关阿里云镜像或远程仓库地址即可使用。
首先,Maven是Apache的一个项目管理工具,它通过一个XML配置文件管理项目的依赖关系,构建过程以及报告。在"maven搭建spring mvc"的过程中,Maven将负责下载所需的库,编译源代码,运行测试,并打包应用为可部署的...
官网公布的 Eclipse 的 Maven2 插件,本插件版本是:m2e-0.12.0.20101115-1102,大小 11 MB。 关于安装 Maven2 插件到 Eclipse 的详细步骤,请参考博客《集成 Maven 2 插件到 eclipse 的过程》,博客地址:...
2. **配置Spring MVC**:在src/main/webapp/WEB-INF下创建spring-servlet.xml文件,配置Spring MVC的相关组件,如DispatcherServlet、ViewResolver、Controller等。还可以利用注解配置@Controller和@RequestMapping...
在`pom.xml`文件中,我们可以通过`<build>`标签下的`<plugins>`部分来配置和使用Maven插件。例如,为了配置Maven仓库插件,我们需要指定插件的groupId、artifactId、version以及可能的执行目标和参数。 ```xml ...
2. **解压插件文件**:将下载的插件文件解压,通常会得到一个`plugins`和`features`两个目录。这两个目录包含了插件的组件和特性描述。 3. **安装插件**:打开Eclipse,选择“Help” -> “Install New Software”,...
Eclipse的Maven离线插件是开发人员在没有网络或者网络不稳定时,进行Maven项目构建和管理的重要工具。Maven是一个强大的项目管理和构建工具,广泛用于Java项目,它通过POM(Project Object Model)文件来管理项目的...