AppFuse 3的乱码问题

书接上回:AppFuse 3常见问题与解决方法,一个新问题:乱码! 在3.0.0版本号下,运行mvn appfuse:full-source命令后使用mvn jetty:run启动工程,页面上就出现了乱码。我要说的是这个乱码问题很有趣,它的有趣之处在于最后的解决方法看上去与问题差的太远。这个解决方法是:找到pom中对hibernate3-maven-plugin的配置,将当中的<executions/>部分凝视掉,即不在process-test-resources阶段运行hbm2ddl。

(假设你须要导出schema到数据库,能够手动运行mvn hibernate3:hbm2ddl,这也更符合实际开发的须要)。是的,看上去没有不论什么关系。可是问题就是出在了这里!以下我们回退到问题发生时一步步地进行排查。对于本文列出之外的一些细节问题,能够參考:基于Appfuse 2.1高速构建工程的注意事项本文原文出处: http://blog.csdn.net/bluishglc/article/details/38640715 严禁不论什么形式的转载,否则将托付CSDN官方维护权益!

首先,查看编译之后的输出文件夹target/classes下的中文properties文件。能够确定这件文件本身就没有转码,是native2ascii插件没有正常工作吗?通过检查。发现问题不在native2ascii-maven-plugin的配置上。使用mvn clean package -X查看maven运行过程中的log信息,发现了以下一段有趣的输出:

[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?

xml version="1.0" encoding="UTF-8"?>
<configuration>
  <buildFilters default-value="${project.build.filters}"/>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <escapeString>${maven.resources.escapeString}</escapeString>
  <escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths>
  <includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs>
  <outputDirectory default-value="${project.build.outputDirectory}"/>
  <overwrite default-value="false">${maven.resources.overwrite}</overwrite>
  <project default-value="${project}"/>
  <resources default-value="${project.resources}"/>
  <session default-value="${session}"/>
  <supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering>
  <useBuildFilters default-value="true"/>
  <useDefaultDelimiters default-value="true"/>
</configuration>
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?

xml version="1.0" encoding="UTF-8"?>
<configuration>
  <basedir default-value="${basedir}"/>
  <buildDirectory default-value="${project.build.directory}"/>
  <classpathElements default-value="${project.compileClasspathElements}"/>
  <compileSourceRoots default-value="${project.compileSourceRoots}"/>
  <compilerId default-value="javac">${maven.compiler.compilerId}</compilerId>
  <compilerReuseStrategy default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
  <compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
  <debug default-value="true">${maven.compiler.debug}</debug>
  <debuglevel>${maven.compiler.debuglevel}</debuglevel>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <executable>${maven.compiler.executable}</executable>
  <failOnError default-value="true">${maven.compiler.failOnError}</failOnError>
  <forceJavacCompilerUse default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
  <fork default-value="false">${maven.compiler.fork}</fork>
  <generatedSourcesDirectory default-value="${project.build.directory}/generated-sources/annotations"/>
  <maxmem>${maven.compiler.maxmem}</maxmem>
  <meminitial>${maven.compiler.meminitial}</meminitial>
  <mojoExecution>${mojoExecution}</mojoExecution>
  <optimize default-value="false">${maven.compiler.optimize}</optimize>
  <outputDirectory default-value="${project.build.outputDirectory}"/>
  <projectArtifact default-value="${project.artifact}"/>
  <showDeprecation default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
  <showWarnings default-value="false">${maven.compiler.showWarnings}</showWarnings>
  <skipMain>${maven.main.skip}</skipMain>
  <skipMultiThreadWarning default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
  <source default-value="1.5">1.7</source>
  <staleMillis default-value="0">${lastModGranularityMs}</staleMillis>
  <target default-value="1.5">1.7</target>
  <useIncrementalCompilation default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
  <verbose default-value="false">${maven.compiler.verbose}</verbose>
  <mavenSession default-value="${session}"/>
  <session default-value="${session}"/>
</configuration>
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.codehaus.mojo:native2ascii-maven-plugin:1.0-beta-1:native2ascii (native2ascii-utf8)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <encoding default-value="${project.build.sourceEncoding}">UTF8</encoding>
  <includes>
    <include>ApplicationResources_zh*.properties</include>
    <include>displaytag_zh*.properties</include>
  </includes>
  <tempDir default-value="${project.build.directory}"/>
  <workDir default-value="${project.build.outputDirectory}"/>
</configuration>
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-resources-plugin:2.6:testResources (default-testResources)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?

>
<configuration>
  <buildFilters default-value="${project.build.filters}"/>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <escapeString>${maven.resources.escapeString}</escapeString>
  <escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths>
  <includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs>
  <outputDirectory default-value="${project.build.testOutputDirectory}"/>
  <overwrite default-value="false">${maven.resources.overwrite}</overwrite>
  <project default-value="${project}"/>
  <resources default-value="${project.testResources}"/>
  <session default-value="${session}"/>
  <skip>${maven.test.skip}</skip>
  <supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering>
  <useBuildFilters default-value="true"/>
  <useDefaultDelimiters default-value="true"/>
</configuration>
[DEBUG] --- init fork of com.github:demo:1.0-SNAPSHOT for org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl (default) ---
[DEBUG] Dependencies (collect): []
[DEBUG] Dependencies (resolve): []
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal:          org.apache.maven.plugins:maven-resources-plugin:2.6:resources (default-resources)
[DEBUG] Style:         Regular
[DEBUG] Configuration: <?

xml version="1.0" encoding="UTF-8"?>
<configuration>
  <buildFilters default-value="${project.build.filters}"/>
  <encoding default-value="${project.build.sourceEncoding}">${encoding}</encoding>
  <escapeString>${maven.resources.escapeString}</escapeString>
  <escapeWindowsPaths default-value="true">${maven.resources.escapeWindowsPaths}</escapeWindowsPaths>
  <includeEmptyDirs default-value="false">${maven.resources.includeEmptyDirs}</includeEmptyDirs>
  <outputDirectory default-value="${project.build.outputDirectory}"/>
  <overwrite default-value="false">${maven.resources.overwrite}</overwrite>
  <project default-value="${project}"/>
  <resources default-value="${project.resources}"/>
  <session default-value="${session}"/>
  <supportMultiLineFiltering default-value="false">${maven.resources.supportMultiLineFiltering}</supportMultiLineFiltering>
  <useBuildFilters default-value="true"/>
  <useDefaultDelimiters default-value="true"/>
</configuration>
[DEBUG] --- exit fork of com.github:demo:1.0-SNAPSHOT for org.codehaus.mojo:hibernate3-maven-plugin:2.2:hbm2ddl (default) ---

这段log的有趣之处在于:resources:resources 被运行了两次。第一次是在native2ascii:native2ascii之前,第二次是在 native2ascii:native2ascii 运行之后运行hbm2ddl时又被又一次调用了一次。为了准确地了解resources:resources和native2ascii:native2ascii的运行顺序,我们从它们各自的文档上找到它们默认绑定的周期说明:

resources:resources -> process-resources

native2ascii:native2ascii -> process-classes

maven的默认生命周期例如以下:

<phases>

  <phase>validate</phase>

  <phase>initialize</phase>

  <phase>generate-sources</phase>

  <phase>process-sources</phase>

  <phase>generate-resources</phase>

  <phase>process-resources</phase>

  <phase>compile</phase>

  <phase>process-classes</phase>

  <phase>generate-test-sources</phase>

  <phase>process-test-sources</phase>

  <phase>generate-test-resources</phase>

  <phase>process-test-resources</phase>

  <phase>test-compile</phase>

  <phase>process-test-classes</phase>

  <phase>test</phase>

  <phase>prepare-package</phase>

  <phase>package</phase>

  <phase>pre-integration-test</phase>

  <phase>integration-test</phase>

  <phase>post-integration-test</phase>

  <phase>verify</phase>

  <phase>install</phase>

  <phase>deploy</phase>

</phases>

依照正常的逻辑, resources:resources会先于native2ascii:native2ascii将全部指定的resource文件进行filter处理之后放置于target文件夹下,之后native2ascii:native2ascii跟进。对指定的文件进行转码。这是很合理的处理方式,而我们的问题就出如今了对resources:resources第二次不正常的调用,这导致了之前经过转码的文件又被未经转码的文件覆盖了。从日志上看,导致resources:resources第二次运行的原因应该是在进入process-test-resources阶段后运行hbm2ddl触发的。也就是说是hbm2ddl的某个动作主动调用了resources:resources,至于详细的细节。是bug还是与maven3的兼容问题,这里我们不再深究,可是解决方法已经变得很清晰上,就是前文提到的做法。

时间: 2024-10-03 00:58:41

AppFuse 3的乱码问题的相关文章

Appfuse:起步

在众多开源的Java开源CMS中探索了很久,终于选定了appfuse,理由如下: 1. 简洁:只搭建了框架,没有做多余的事 2. 完成了基本的用户管理:用户.角色.权限的定义很清晰 3. 符合预期的架构要求:SpringMVC + Hibernate + Velocity 4. 基于Maven搭建 更多appfuse的能力请参考博文 初识appfuse 准备开始! 1. 基于Maven创建项目(基于SpringMVC的版本): mvn archetype:generate -B -Darchet

Python cmd 中文显示乱码

方法一:# -*- coding:utf-8 -*- content = "我是中文" content_unicode = content.decode("utf-8") content_gbk = content_unicode.encode("gbk") print content_gbk 方法二: 解决非常简单 先引入import sys 再加一句:type=sys.getfilesystemencoding() 然后在输出乱码的数据的时候

Linux环境下MySQL数据库用SQL语句插入中文显示 “问号或者乱码 ” 问题解决!

问题: 在普通用户权限下执行 mysql -u root -p进入mysql数据库,中间步骤省略,插入数据:insert into 库名(属性)values('汉字'); 会出现如下提示:  Query OK, 1 row affected, 1 warning (0.00 sec)    表明出现错误,没有插入成功,然后执行select * from 表名   就会出现如下的问题:显示的表中出现乱码或者问号. 如图: 解决方案: 首先重新打开一个终端窗口(方便操作),进入root用户模式 执行

Activiti Linux部署流程图出现乱码

前段时间使用Activiti在本机以及window环境下测试发现流程图正常显示,在linux下汉字变成了小方块. 经网上查找资料: 发现自己的京东云未安装中文字体,由于本人系统activiti配置文件设置的"宋体",因此需在window系统中找到宋体字体复制到linux系统中进行安装. 1,进入C:\Windows\Fonts,找到"宋体 常规"文件simsun.ttc 2,进入cd /usr/java/jdk1.7.0_79/jre/lib/fonts,新建fal

centos6.7下安装mysql5.6.22同时解决中文乱码问题

1.下载 http://dev.mysql.com/downloads/mysql/ 或者使用wget下载: wget http://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-5.6.22-1.el6.i686.rpm-bundle.tar 2.安装 2.1.  检测是否已经安装了mysql rpm -qa | grep mysql 如果已经安装了,将其卸载,如: rpm -e --nodeps  mysql-libs-5.1.71-1.el6.x8

页面与后台传递中文乱码问题(java乱码)

1.前台中文传递到后台乱码. 前台不须要处理, 系统一般都会默认把中文转化为ISO-8859-1类型. 仅仅需在后台接受数据是处理 Str为前台传过来的中文字符串: String inputer = new String( Str.getBytes("ISO-8859-1") , "GB2312"); 2.前台不仅包括中文.并且包括特殊字符,假设仅仅在后台转码,比較困难.採用前台转码,那么就採用后台解码的方式处理 var theid = encodeURI(enco

java web 程序乱码问题

1.问题:今日观别人代码,发现前端输入正确,保存后出现乱码.数据库中也为乱码. 输入: 输入完成后,列表页面乱码如下: 数据库乱码如下: 分析问题:??? 解决问题:???

XShell连接CentOS 7.2显示中文乱码问题的解决方法

背景 使用U盘往Windows主机.Linux主机传文件还是经常的事,但有时候文件名有中文, 传到Linux机器会有乱码,选择起来也很麻烦,最近刚好遇到,写下解决方法. 环境 Linux [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected]-base ~]# echo $LANG en_US.UTF-8 [[email protected]-ba

解决MVC 中httpstatuscoderesult 通过StatusDescription 返回中文乱码

c#中httpstatuscoderesult语法如下: public HttpStatusCodeResult( HttpStatusCode statusCode, string statusDescription ) 在Action中通过 return new HttpStatusCodeResult(HttpStatusCode.BadRequest,"我是中文字符串") 在前端返回的是乱码. 原因: 根据 http 协议,StatusDescription 是写在 http