文档章节

基于Appfuse 2.1快速构建工程的注意事项

猪刚烈
 猪刚烈
发布于 2014/10/12 11:48
字数 1117
阅读 23
收藏 1

好久没玩Appfuse了,最近因为工作的原因,需要快速构建两个工程原型作sample之用,于是又想到了Appfuse.自Appfuse 2.1发布后这还是第一次使用,以下罗列了使用Appfuse2.1生成工程原型之后的一些“修剪”工作,以备后查。关于appfuse 3的常见问题请参考:AppFuse 3常见问题与解决方法 以及AppFuse 3的乱码问题


1.如果创建的工程是某个父工程的modular,不要直接在父工程下使用appfuse的archetype创建工程,否则创建出来的工程有错误。


2.如果使用mvn appfuse:full-source,只能在maven2下执行,在maven3下执行是无法成功的。


3.删除pom中的<resources/>中关于“target”的<resource/>部分,或者参考7,使用mvn org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse 创建eclipse工程。


4.使用mvn appfuse:full-source生成源代码后,model、dao、service的并不在groupId.artifactId包下,而是直接在group包下,如果将这些包重构到groupId.artifactId包下,需要修改如下文件:hibernate.cfg.xml以及所有applicationContext*.xml文件,在这些文件中使用查找替换确保每一个包名都更正了。

实际上,我们可以直接绕过这个问题,方法是在使用archetype创建工程的时候,直接将groupId设为groupId.artifactId的形式,例如,如果我要创建一个groupId为net.sf,artifactId为demo的工程,我们可以将groupId设定为net.sf.demo,artifactId为demo,命令如下:

mvn archetype:generate -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-struts-archetype -DarchetypeVersion=2.1.0 -DgroupId=net.sf.demo -DartifactId=demo -DarchetypeRepository=http://oss.sonatype.org/content/repositories/appfuse

待工程生成后,只需要将pom.xml中的<groupId/>改回net.sf即可。


5.整理spring配置文件
首先:删除\src\main\webapp\WEB-INF\applicationContext.xml,这里重复定义了关于compass的配置,但是记得要把

<bean id="compassPostProcessor"  class="com.threeti.umax.mockapp.salesapp.webapp.search.CompassConfigurationPostProcessor"/>

拷贝到applicationContext-dao.xml文件中。同时建议把


/WEB-INF/applicationContext*.xml
/WEB-INF/cxf-servlet.xml
/WEB-INF/security.xml


的文件移到\src\main\resources文件夹下
修改在web.xml中关于spring配置文件位置的参数contextConfigLocation改为


<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:/applicationContext-resources.xml
            classpath:/applicationContext-dao.xml
            classpath:/applicationContext-service.xml
            classpath:/applicationContext-struts.xml
            classpath:/cxf-servlet.xml
            classpath:/security.xml
        </param-value>
    </context-param>

同时记得修改所有测试用例父类中@ContextConfiguration中的spring文件名


补充(2014-8-19):对于为什么appfuse会分散放置spring配置文件的这个问题我是这样分析的:理论上这些文件放在WEB-INF下也可,放在resources下也可,分开放置可能是出于这样的考量:与WEB应用相关的配置如果放在WEB-INF下看似较为合理,比如:cxf-servlet.xml,security.xml等等,与后台业务处理相关的,如:dao,services的application context则放置在resources下,从安置位置的合理性上看这样做是比较规范,但是分散存放spring配置文件确实不是利于管理和查看,而实际上,如果我们看看一下使用appfuse生成的多模块工程,我们应该能够一下找到appfuse这样做的最主要出发点,即:让与WEB应用相关的spring配置放置在一个地方,让后台业务处理相关的spring配置放置在一个地方主要是为了方便appfuse生成工程!具体地说是为了在生成单一工程和多模块工程时不用调整文件位置!这也就能解释为什么在resources和WEB-INF下有两个一样的applicationContext.xml文件了!



6.关于单元测试报告testSearch(com.threeti.umax.mockapp.salesapp.webapp.action.UserActionTest)失败的问题
原因是org.compass.core.engine.SearchEngineException: Failed to rename index,对compass不太了解,目前还未找到解决方法,但不妨碍其他测试用例的执行。

7. 原pom中对于资源过滤的配置不是很好,我倾向于将需要配置的文件一一列出,这样比较明细。于是通常我会改为:


<resources>
			<!-- Filter jdbc.properties & mail.properties. NOTE: We don't filter applicationContext-infrastructure.xml, 
				let it go with spring's resource process mechanism. -->
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>jdbc.properties</include>
					<include>mail.properties</include>
				</includes>
			</resource>
			<!-- Include other files as resources files. -->
			<resource>
				<directory>src/main/resources</directory>
				<filtering>false</filtering>
				<excludes>
					<exclude>jdbc.properties</exclude>
					<exclude>mail.properties</exclude>
				</excludes>
			</resource>
		</resources>
		<testResources>
			<testResource>
				<directory>src/test/resources</directory>
				<filtering>true</filtering>
				<includes>
					<include>jdbc.properties</include>
					<include>mail.properties</include>
				</includes>
			</testResource>
			<testResource>
				<directory>src/test/resources</directory>
				<filtering>false</filtering>
				<excludes>
					<exclude>jdbc.properties</exclude>
					<exclude>mail.properties</exclude>
				</excludes>
			</testResource>
		</testResources>

改动之后,在使用mvn eclipse:eclipse时可能会报 Request to merge when 'filtering' is not identical.这样的错误,据称这是eclipse插件2.7和2.8的bug,可使用2.6版本执行,命令如下:


mvn org.apache.maven.plugins:maven-eclipse-plugin:2.6:eclipse


本文转载自:http://blog.csdn.net/bluishglc/article/details/6730773

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
SpringCloud核心教程 | 第一篇: 使用Spring Initializr来快速构建Spring Cloud工程

spring cloud简介 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开...

星缘1314
08/09
0
0
SpringCloud核心教程 | 第一篇: 使用Intellij中的Spring Initializr来快速构建Spring Cloud工程

spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简...

星缘1314
07/13
0
0
Spring Initializr 构建Spring Boot/Cloud工程

在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建。而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建,也可以通过《Sprin...

明理萝
06/20
0
0
xmake-idea v1.0.3,集成 xmake 的 Intellij-IDEA 插件

xmake-idea 插件深度集成了xmake和Intellij-IDEA,提供方便快速的跨平台c/c++构建。 并且它也支持其他基于Intellij的IDE环境, 例如:Clion, Android Studio等等。 注:使用此插件,需要先安装...

ruki
2017/11/08
808
7
SpringCloud核心教程 | 第二篇: 使用Intellij中的maven来快速构建Spring Cloud工程

spring cloud简介 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单,可以在开...

星缘1314
07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

002,zabbix-agent的安装 监控Linux主机

2.1.安装zabbix-agent $ rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm$ yum install -y zabbix-agent zabbix-get 2.2.配置zabbix-agent ......

happyeveryday32
37分钟前
2
0
docker learn :swarm

swarm是什么 swarm是一组运行docker服务的集群,之后,还是使用那些命令去操作docker,但是是通过swarm manager来执行的。 swarm中的机器可以是实体的也可以是虚拟的,加入swarm后,他们被当作...

writeademo
37分钟前
1
0
Golang + vscode 开发环境配置

GOPATH 环境变量的配置 https://my.oschina.net/xinxingegeya/blog/718305 安装vscode go 扩展 下载vscode ,安装go的扩展https://github.com/Microsoft/vscode-go 该扩展对 Golang 支持非常......

秋风醉了
40分钟前
0
0
idea jar包

我自己用idea新建一个springboot项目,打包一直有问题,百度了下,又总结了下。 方式一: 找到Project Structure菜单,然后点开,照下图点击 然后出现下图所示 红框1:为你项目的main函数所在...

朝如青丝暮成雪
41分钟前
0
0
Vue scoped CSS 与深度作用选择器 /deep/

使用 scoped 后,父组件的样式将不会渗透到子组件中。 例如(无效): <template> <div id="app"> <el-input class="text-box" v-model="text"></el-input> </div></template><......

不负好时光
41分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部