`
redhacker
  • 浏览: 494300 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用maven、jaxb等技术构建可配置编译打包及可配置项目运行

 
阅读更多
一、说在前面

apache ant是以个非常流行的项目构建打包开源工具。在很长一段时间里,ant简化了我们项目构建打包的过程,使得我们项目部署的速度有了大幅的提升。

然而,熟悉ant使用的朋友可能与我都有一个切身的感受:当我们在使用ant进行项目构建打包时,由于要分不同的环境(如:开发环境、测试环境、生产环境),构建打包的项目在不同环境中运行,所要加载的配置文件不同,因此,我们通常会将不同环境的配置文件放置多分,在打包的时候修改build.xml拷贝不同的配置,最终打包到war中。这种打包方式极为不便,我们期望有一种更简便的构建打包方式,不需要频繁修改build.xml,就能分别打出不同环境的war包。maven的出现为我们实现这个期望带来了希望。

本文就结合eclipse、maven eclipse插件、jaxb技术,实现不同环境情况下的灵活打包。

二、约定:

1、存在的运行环境有:测试环境与正式环境,分别用test与real两个关键字表示
2、文章假定您掌握了maven的使用,并且已经安装配置好了maven环境
3、文章假定您已经安装好了eclpse,并安装了eclipse maven插件
4、文章假定您理解xml与jaxb之间的关系
5、文章假定您理解xml文件与xsd文件之间的关系

三、设计与实现

1、创建maven web项目















2、创建相关配置文件(test.properties、real.properties、config.xml)



3、编辑相关配置文件内容



4、设置编译打包不同环境的配置文件



5、生成config.xml对应的config.xsd









6、生成config.xml对应的jaxb(通过config.xsd生成)







7、清除多余文件,并拷贝部署配置文件到特定目录



8、加入servlet-api.jar,并创建Servlet Listener类,用于加载config.xml配置



package com.javaedu.web;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;
import java.util.Properties;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.xml.bind.JAXB;

import org.springframework.util.ResourceUtils;

import com.javaedu.cfg.jaxb.Attribute;
import com.javaedu.cfg.jaxb.Attributes;
import com.javaedu.cfg.jaxb.MyCfg;

public class ConfigLoaderListener implements ServletContextListener {

    public static Properties appConfig = new Properties();

    public void contextInitialized(ServletContextEvent arg0) {
        File clsFile = null;
        try {
            clsFile = ResourceUtils.getFile("classpath:config.xml");
        } catch (FileNotFoundException e) {
            System.out.println("loading a config.xml from classpath error!");
        }
        MyCfg cfg = JAXB.unmarshal(clsFile, MyCfg.class);
        Attributes atts = cfg.getAttributes();
        List<Attribute> attList = atts.getAttribute();
        if (attList != null && !attList.isEmpty()) {
            for (Attribute att : attList) {
                appConfig.put(att.getKey(), att.getValue());
            }
        }
    }

    public void contextDestroyed(ServletContextEvent arg0) {
        appConfig = null;
    }

}


web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
    <listener>
        <listener-class>
            com.javaedu.web.ConfigLoaderListener
        </listener-class>
    </listener>
</web-app>


9、创建jsp用于读取配置

index.jsp:
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@page import="com.javaedu.web.ConfigLoaderListener"  %>
<html>
<head>
<title>红色黑客博客老地址</title>
</head>
<body>
<h2>红色黑客博客老地址:<%= ConfigLoaderListener.appConfig.get("old.url") %></h2>
<h2>红色黑客博客新地址:<%= ConfigLoaderListener.appConfig.get("new.url") %></h2>
</body>
</html>


10、设定与配置打包插件

pom.xml:

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.1.1</version>
				<configuration>
					<packagingExcludes>
						WEB-INF/classes/real.properties,
						WEB-INF/classes/test.properties,
					</packagingExcludes>
					<filters>
						<filter>src/main/resources/real.properties</filter>
					</filters>
					<webappDirectory>target/xmlconfig</webappDirectory>
					<webResources>
						<resource>
							<!-- 元配置文件的目录,相对于pom.xml文件的路径 -->
							<directory>src/main/pkgfilter</directory>
							<!-- 是否过滤文件,也就是是否启动auto-config的功能 -->
							<filtering>true</filtering>
							<!-- 目标路径 -->
							<targetPath>WEB-INF/classes</targetPath>
						</resource>
					</webResources>
				</configuration>
			</plugin>


四、部署与运行

1、设定不同环境打包快捷方式,并运行










2、测试环境编译打包后部署运行的效果图:



3、正式环境编译打包后部署运行的效果图:



如果您觉得本文对您有益,请点击博文后的google广告,对作者表示支持,谢谢!
  • 大小: 56.5 KB
  • 大小: 34.8 KB
  • 大小: 32.9 KB
  • 大小: 37.9 KB
  • 大小: 41.1 KB
  • 大小: 36.1 KB
  • 大小: 30.3 KB
  • 大小: 18.4 KB
  • 大小: 52.8 KB
  • 大小: 10.3 KB
  • 大小: 52.9 KB
  • 大小: 37.2 KB
  • 大小: 22.6 KB
  • 大小: 40.1 KB
  • 大小: 38.7 KB
  • 大小: 37.3 KB
  • 大小: 19.7 KB
  • 大小: 9.5 KB
  • 大小: 89.9 KB
  • 大小: 83.8 KB
  • 大小: 88.1 KB
  • 大小: 20.4 KB
  • 大小: 19.6 KB
  • 大小: 28.4 KB
  • 大小: 43.3 KB
分享到:
评论

相关推荐

    CXF实例一 Maven构建

    【CXF实例一 Maven构建】是一个关于如何使用Maven来构建Apache CXF项目的教程。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)的应用程序,它支持多种Web服务标准,如SOAP、RESTful、WS-*...

    apache-maven-3.3.3

    - **运行Maven**:通过命令行使用`mvn clean install`等命令进行编译、测试和打包操作。 4. **使用场景**: - **项目构建**:Maven可以用来创建、编译、测试、打包、部署Java项目。 - **依赖管理**:通过在POM....

    maven_simpleexample.zip

    1. **Maven搭建小案例**:Maven是一个广泛使用的Java项目管理和构建工具,它通过定义项目的结构和依赖关系来自动化构建过程,包括编译、测试、打包、部署等。在这个案例中,我们可能看到一个典型的Maven项目结构,...

    netty 权威指南 2

    7. `pom.xml`:这是 Maven 项目对象模型(Project Object Model)的配置文件,定义了项目依赖、构建目标、插件等。在 Netty 项目中,通过 Maven 可以轻松管理和下载所需的依赖库。 8. `binding.xml`:这可能与数据...

    apache-cxf-2.2.12-src.zip

    5. **构建与部署**:使用Ant或Maven打包项目,生成可部署的JAR或WAR文件,然后在目标服务器上部署。 6. **调试与测试**:利用IDE的调试工具进行问题定位,同时编写和运行更多的测试用例以保证代码质量。 通过深入...

    proactive-programming-mao-bundle-5.2.0-v4.zip

    通过 Maven 插件,开发者可以自定义构建步骤,例如编译源码、打包、测试等。在这个特定的案例中,插件可能包含了配置,使得在构建过程中,JiBX 能够自动将 Java 类绑定到 XML,同时 JAX-RS 资源类也能被正确地处理和...

    JTOPCMS部署所需的所有额外jar包

    5. **编译与打包**:使用Maven或者Gradle等构建工具,编译源代码并生成可部署的WAR或JAR文件。 6. **部署**:将生成的WAR或JAR文件部署到Servlet容器(如Tomcat)中,按照容器的部署指南进行操作。 7. **启动与...

    Spring Webservice Demo(含客户端)

    在本例中,你应该按照readme.txt中的指示进行操作,例如配置Maven、导入项目、运行服务器和客户端等。 5. **spring-ws-test**:这个子目录可能是项目的测试代码,可能包含JUnit测试类,用于验证服务端的正确性。...

    jaxb-examples

    在示例中,我们可以学习如何在Maven的pom.xml文件中配置JAXB相关的依赖,以及如何使用Maven插件如`maven-compiler-plugin`和`maven-jar-plugin`来编译和打包项目。 5. **数据绑定API的使用**:JAXB提供了诸如`...

    Ant部署WebService服务

    Apache Ant是一个流行的开源构建工具,它基于XML来定义项目构建过程,允许开发者自动化编译、打包、测试等任务。这篇博客“Ant部署WebService服务”可能详细阐述了如何使用Ant来部署Web服务,而“NULL”描述意味着...

    apache-wink-1.0-incubating.tar.gz

    4. **构建脚本**:如Maven的pom.xml文件,用于编译、测试和打包项目。 5. **配置文件**:例如web.xml,用于配置Wink在Servlet容器中的部署。 6. **库文件**:依赖的JAR文件,包括Apache Wink自身的库以及外部依赖,...

    CXF-demo.zip_cxf_cxf 2.7.11 demo_cxf demo_cxf webservice demo_we

    6. **build脚本**:可能是Ant或Maven的构建脚本,用于编译、打包和测试项目。 通过学习这个示例,你可以了解到如何使用CXF创建服务端点、配置服务发布、处理请求和响应,以及如何使用客户端来调用这些服务。这不仅...

    myeclipse中java EE 6 的jar包全

    这可能需要排除某些jar,或者使用Maven或Gradle等构建工具来管理依赖关系,确保它们的版本兼容。 在MyEclipse中,可以通过以下步骤处理jar包冲突: 1. **项目属性设置**: 在项目属性中,查看并调整构建路径,确保...

    xml3d-jaxb:XML3D JAXB绑定

    2. 构建脚本:如`pom.xml`,这是Maven项目的配置文件,用于构建、编译、测试和打包项目。 3. 测试用例:验证绑定正确性的示例代码和测试数据。 4. 文档:可能包含README文件或其他形式的说明,解释如何使用此库和...

    xfire webservice 完整实例下载

    4. **构建脚本**:可能是Ant或Maven的build.xml文件,用于编译、打包和部署项目。 5. **运行指南**:可能是一个README文件,指导用户如何编译、运行实例,并进行测试。 为了学习这个实例,你需要按照以下步骤操作...

    apache-cxf-2.7.6.rar

    - **构建脚本**:如Maven或Ant的构建脚本,用于编译、打包和测试项目。 为了使用这个压缩包,你需要先解压,然后根据你的需求选择相应的文件和文档进行阅读。如果你打算开发Web服务,可以按照文档的指导配置和启动...

    cxf-2.6.13.rar

    - 构建脚本:如Maven的pom.xml文件,用于构建和打包项目。 通过这个压缩包,开发者可以深入理解CXF的工作原理,学习如何在自己的项目中利用它来构建高效、安全的Web服务。同时,也可以参与社区,分享经验,解决遇到...

    apache-cxf-2.6.2.rar

    5. **构建脚本**:如Ant或Maven脚本,用于编译和打包CXF项目。 在实际项目中,开发者会根据需求选择合适的方式集成Apache CXF,例如通过Maven或Gradle管理依赖,然后利用CXF提供的各种组件和服务模型,快速构建出...

    castor1.3源码

    9. **编译与构建**:通过查看源码,你可以学习到如何使用Ant或Maven等构建工具来编译和打包Castor项目,这对于学习软件工程流程也有帮助。 10. **测试用例**:源码通常包含了大量的单元测试和集成测试,这些测试...

Global site tag (gtag.js) - Google Analytics