文档章节

AppFuse 3的乱码问题

猪刚烈
 猪刚烈
发布于 2014/10/12 11:47
字数 1206
阅读 19
收藏 0
点赞 0
评论 0
书接上回: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的兼容问题,这里我们不再深究,但是解决方法已经变得很清晰上,就是前文提到的做法。

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

共有 人打赏支持
猪刚烈
粉丝 22
博文 708
码字总数 110
作品 1
海淀
程序员
蒲江县服务(小妹)这真找哪全套一晚上多少?

【十Ⅴィ訁:KL22228芬芬】蒲江县服务(小妹【各种特色,任您挑选】【十Ⅴィ訁:KL22228芬芬】客人虐我千百遍,我待客人如初恋我们将竭诚为您服务,只有您想不到,没有我们做不...

lxw1 ⋅ 03/17 ⋅ 0

[笔记]使用AppFuse 2.1.0生成项目并解决几个问题

step1: 生成一个基本结构的项目 进入到http://appfuse.org/display/APF/AppFuse+QuickStart页面,在 Create a project下的Choose your Stack部分填写好项目基本信息。 我的示例如下: mvn ar...

leeoo ⋅ 2011/12/24 ⋅ 0

[Java] Appfuse & tapestry 小记

忙里抽闲在《Maven2小记》 之后准备把 Appfuse 的一些使用心得记录一下,以备参考: 简介:Appfuse是一个开放源码的项目和应用程序,它由 Matt Raible开发,它集成了流行的Spring、Hibernate...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

[Java] Appfuse 最佳实践

前段时间刚写了《Catalyst Tutorial 最佳实践》,现在又手痒,给大家奉献这篇《Appfuse 最佳实践》,目的主要是趁这段相对比较空闲的时间,多写一些有用的教程,一方面在网上也看到过很多关于...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

AppFuse 3.5 发布,Web 应用框架

AppFuse 3.5 发布,此版本包括大量的改进,主要更新内容: 为 Wicket 提供 CRUD 生成支持 升级至 Tapestry 5.4 集成 Spring IO Platform,进行依赖管理 重构单元测试,使用 JUnit 4 重命名 ...

oschina ⋅ 2015/12/31 ⋅ 5

Maven 的41种骨架功能介绍

Maven 的41种骨架: ...>mvn archetype:generate 1: internal -> appfuse-basic-jsf (创建一个基于Hibernate,Spring和JSF的Web应用程序的原型) 2: internal -> appfuse-basic-spring (创建一......

Galy_绿 ⋅ 2016/02/25 ⋅ 0

maven的骨架功能介绍

Maven 的41种骨架: ...>mvn archetype:generate 1: internal -> appfuse-basic-jsf (创建一个基于Hibernate,Spring和JSF的Web应用程序的原型) 2: internal -> appfuse-basic-spring (创建一......

AcresJoe1 ⋅ 2016/10/25 ⋅ 0

AppFuse 2.1 发布,Web应用框架

AppFuse是一个集成了当前最流行的Web应用框架的一个更高层次的Web开发框架,也 可以说是一个Web开发基础平台,它与它所集成的各种框架相比,它提供了一部分所有Web系统开发过程中都需要开发的...

鉴客 ⋅ 2011/04/06 ⋅ 1

AppFuse Generator

AppFuse 是一个 基于JSF,Struts,Hibernate等开放源代码工具的WEB应用 的支援框架。使用AppFuse能简单地组合以上框架,缩短开发时间。但使用AppFuse还得手动生成很多文件以及做很多手工修改...

匿名 ⋅ 2008/09/16 ⋅ 0

在eclipse中启动AppFuse应用

本文是根据官方教程中IDE部分,通过实际测试 eclipse导入appfuse生成的maven工程 前提:eclipse装maven插件,可在Help > Eclipse Marketplace里搜索关键字“maven”找到对应一堆插件,我安装...

银月光海 ⋅ 2013/06/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 18分钟前 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部