使用AppFuse1.8.2遇到的问题
内容提要
这个部分将说明使用AppFuse1.8.2遇到的问题以及如何解决这些问题。
- 我会用这种格式说明我在 实际过程 中的操作。
目录
- 导入Eclipse以后无法编译
- 运行ant setup-db无法正确创建数据库
- 使用ant deploy无法发布应用
- 中文乱码问题
- 我实际使用的是webwork+spring+ hibernate遇到的,可能有些地方与默认的struts+spring+hibernate不一样,有些问题是使用了webwork引出的。使用本文提供的例子需要在创建自己的应用后运行ant install-webwork。
导入Eclipse以后有无法编译
在Eclipse中将新创建的Myapp工程导入(import)后,Eclipse提示struts.jar和struts-el.jar两个包找不到。需要手工在Eclipse中把工程对这两个包的引用移除掉。
另外webwork相关的包引用没有添加到工程中,需要手工加入。至此Eclipse可以正常编译整个工程。
如果想彻底解决这个问题,应该考虑修改install-webwork任务。这个问题对使用影响不大,所以我就没有研究了。:-)
运行ant setup-db无法正确创建数据库
会出现app_user表无法创建的错误:
[schemaexport] (hbm2ddl.SchemaExport 167 ) Unsuccessful: create table app_user
(username varchar(20) not null, version integer not null, password varchar(255) not null,
first_name varchar(50) not null, last_name varchar(50) not null, address varchar(150), city
varchar(50) not null, province varchar(100), country varchar(100), postal_code varchar(15) not
null, email varchar(255) notnull unique, phone_number varchar(255), website varchar(255),
password_hint varchar(255), enabled bit, primary key (username))
[schemaexport] (hbm2ddl.SchemaExport 168 ) Specified key was too long. Max key
length is 500
具体错误和解决办法可以参考AppFuse实践一——配置安装
。
- AppFuse 1.8.1因为DBUnit的关系也会出现无法创建表的问题,这个问题在1.8.2已经改过来了。
使用ant deploy无法发布应用
运行ant setup-db创建数据库,运行ant setup-tomcat正确配置Tomcat以后,运行ant deploy发布应用会碰到下面的问题:
BUILD FAILED
C:\Myapp\build.xml:285: xdoclet.XDocletException: Couldn't find template:
C:\Myapp\metadata\templates\struts_form.xdt
检查build.xml 285行,发现下面的的关于gen-forms的ant任务定义
<!-- Generate ActionForms from POJOs -->
<target name="gen-forms" depends="prepare" unless="webdoclet.uptodate"
description="Generates ActionForms from POJOs">
<taskdef name="xdoclet" classname="xdoclet.DocletTask"
classpathref="xdoclet.classpath"/>
<!-- generate struts forms -->
<xdoclet destdir="${build.dir}/web/gen"
excludedtags="@version,@author"
addedtags="@xdoclet-generated at ${TODAY}"
force="${xdoclet.force}"
mergedir="metadata/web">
<fileset dir="src/dao"/>
<!-- generate struts forms -->
<actionform templateFile="metadata/templates/struts_form.xdt">
<packageSubstitution packages="model"
substituteWith="webapp.form"/>
</actionform>
</xdoclet>
</target>
这个任务是使用struts用到的,使用webwork不需要用,去掉compile-web任务对gen-forms的引用,把build.xml文件中的的296行
<target name="compile-web" depends="package-service,stage-web,gen-forms" description="Compile web module">
修改成
<target name="compile-web" depends="package-service,stage-web" description="Compile web module">
然后再运行ant deploy,出现好多错
compile-web:
[echo] Compiling web...
[mkdir] Created dir: C:\myfile\Myapp\build\test\web\classes
[javac] Compiling 23 source files to C:\myfile\Myapp\build\web\classes
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:
21: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:
22: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.ActionSupport;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:
37: cannot resolve symbol
[javac] symbol : class ActionSupport
[javac] location: class com.vicfuture.webapp.action.BaseAction
[javac] public class BaseAction extends ActionSupport {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction
.java:11: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction
.java:12: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.ValidationAware;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction
.java:14: cannot resolve symbol
[javac] symbol : class ValidationAware
[javac] location: class com.vicfuture.webapp.action.FileUploadAction
[javac] public class FileUploadAction extends BaseAction implements Validati
onAware {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\ReloadAction.jav
a:16: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\SignupAction.jav
a:13: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\UserAction.java:
19: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHa
ndlerInterceptor.java:11: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHa
ndlerInterceptor.java:12: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.ActionInvocation;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHa
ndlerInterceptor.java:13: package com.opensymphony.xwork.interceptor does not ex
ist
[javac] import com.opensymphony.xwork.interceptor.Interceptor;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHa
ndlerInterceptor.java:24: cannot resolve symbol
[javac] symbol : class Interceptor
[javac] location: class com.vicfuture.webapp.interceptor.ExceptionHandlerInt
erceptor
[javac] public class ExceptionHandlerInterceptor implements Interceptor {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ExceptionHa
ndlerInterceptor.java:51: cannot resolve symbol
[javac] symbol : class ActionInvocation
[javac] location: class com.vicfuture.webapp.interceptor.ExceptionHandlerInt
erceptor
[javac] public String intercept(ActionInvocation invocation)
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAut
horizationInterceptor.java:9: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAut
horizationInterceptor.java:10: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.ActionInvocation;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAut
horizationInterceptor.java:11: package com.opensymphony.xwork.interceptor does n
ot exist
[javac] import com.opensymphony.xwork.interceptor.Interceptor;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAut
horizationInterceptor.java:24: cannot resolve symbol
[javac] symbol : class Interceptor
[javac] location: class com.vicfuture.webapp.interceptor.UserRoleAuthorizati
onInterceptor
[javac] public class UserRoleAuthorizationInterceptor implements Interceptor
{
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\UserRoleAut
horizationInterceptor.java:27: cannot resolve symbol
[javac] symbol : class ActionInvocation
[javac] location: class com.vicfuture.webapp.interceptor.UserRoleAuthorizati
onInterceptor
[javac] public String intercept(ActionInvocation invocation) throws Exce
ption {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:5: package com.opensymphony.webwork does not exist
[javac] import com.opensymphony.webwork.ServletActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:6: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.Action;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:7: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.ActionContext;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:8: package com.opensymphony.xwork does not exist
[javac] import com.opensymphony.xwork.ActionInvocation;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:9: package com.opensymphony.xwork.interceptor does not exist
[javac] import com.opensymphony.xwork.interceptor.AroundInterceptor;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:10: package com.opensymphony.xwork.validator does not exist
[javac] import com.opensymphony.xwork.validator.ActionValidatorManager;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:17: cannot resolve symbol
[javac] symbol : class AroundInterceptor
[javac] location: class com.vicfuture.webapp.interceptor.ValidationIntercept
or
[javac] public class ValidationInterceptor extends AroundInterceptor {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:19: cannot resolve symbol
[javac] symbol : class ActionInvocation
[javac] location: class com.vicfuture.webapp.interceptor.ValidationIntercept
or
[javac] protected void after(ActionInvocation dispatcher, String result)
throws Exception {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\interceptor\ValidationI
nterceptor.java:22: cannot resolve symbol
[javac] symbol : class ActionInvocation
[javac] location: class com.vicfuture.webapp.interceptor.ValidationIntercept
or
[javac] protected void before(ActionInvocation invocation) throws Except
ion {
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:
39: cannot resolve symbol
[javac] symbol : method getClass ()
[javac] location: class com.vicfuture.webapp.action.BaseAction
[javac] protected transient final Log log = LogFactory.getLog(getClass()
);
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:
90: cannot resolve symbol
[javac] symbol : variable ServletActionContext
[javac] location: class com.vicfuture.webapp.action.BaseAction
[javac] return ServletActionContext.getRequest();
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\BaseAction.java:
98: cannot resolve symbol
[javac] symbol : variable ServletActionContext
[javac] location: class com.vicfuture.webapp.action.BaseAction
[javac] return ServletActionContext.getResponse();
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction
.java:27: cannot resolve symbol
[javac] symbol : variable ServletActionContext
[javac] location: class com.vicfuture.webapp.action.FileUploadAction
[javac] ServletActionContext.getServletContext().getRealPath("/r
esources") +
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction
.java:63: cannot resolve symbol
[javac] symbol : variable SUCCESS
[javac] location: class com.vicfuture.webapp.action.FileUploadAction
[javac] return SUCCESS;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\FileUploadAction
.java:67: cannot resolve symbol
[javac] symbol : variable INPUT
[javac] location: class com.vicfuture.webapp.action.FileUploadAction
[javac] return INPUT;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintActi
on.java:41: cannot resolve symbol
[javac] symbol : method getText (java.lang.String)
[javac] location: class com.vicfuture.webapp.action.PasswordHintAction
[javac] args.add(getText("user.username"));
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintActi
on.java:42: cannot resolve symbol
[javac] symbol : method getText (java.lang.String,java.util.List)
[javac] location: class com.vicfuture.webapp.action.PasswordHintAction
[javac] addActionError(getText("errors.required", args));
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintActi
on.java:43: cannot resolve symbol
[javac] symbol : variable INPUT
[javac] location: class com.vicfuture.webapp.action.PasswordHintAction
[javac] return INPUT;
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintActi
on.java:58: cannot resolve symbol
[javac] symbol : method getText (java.lang.String)
[javac] location: class com.vicfuture.webapp.action.PasswordHintAction
[javac] String subject = getText("webapp.prefix") + getText("use
r.passwordHint");
[javac] ^
[javac] C:\myfile\Myapp\src\web\com\vicfuture\webapp\action\PasswordHintActi
on.java:58: cannot resolve symbol
[javac] symbol : method getText (java.lang.String)
[javac] location: class com.vicfuture.webapp.action.PasswordHintAction
[javac] String subject = getText("webapp.prefix") + getText("use
r.passwordHint");
[javac] ^
[javac] The system is out of resources.
[javac] Consult the following stack trace for details.
[javac] java.lang.OutOfMemoryError
BUILD FAILED
肯定是编译路径中没有加入webwork相关包的引用!手工修改Myapp目录下面properties.xml文件,加入webwork相关包的引用,在properties.xml文件第146行后面加上新的一行
<fileset dir="${webwork.dir}" includes="*.jar"/>
然后运行ant deploy 还是出错
BUILD FAILED
C:\myfile\Myapp\build.xml:54: C:\myfile\Myapp\build\web\gen not found.
去掉build.xml第54行
<srcfiles dir="${build.dir}/web/gen" includes="**/*.java"/>
还有第320行
<fileset dir="${build.dir}/web/gen"/>
- 实际上把这两句注释掉就可以了,这个是前面那个gen-forms任务用到的输出目录。
运行ant deloy,启动tomcat,可以正常工作了!
中文乱码问题
界面上可以看到中文字符无法正常显示,有很多“?”。
怀疑是ApplicationResources_zh_CN.properties文件有问题,用eclipse打开编辑(在web\WEB-INF\classes目录下),果然看到是乱码。把早期版本的文件内容copy过来覆盖重新发布,一切正常了!
最新评论