非常长一段时间没做SSH项目了。近期抽出时间看了一下升级到3.x的appfuse,对新版本号使用过程中出现的一些问题进行了排查。汇总例如以下。以备后用。本文原文出处: http://blog.csdn.net/bluishglc/article/details/38640715 严禁不论什么形式的转载,否则将托付CSDN官方维护权益!

起步

使用appfuse的第一步自然是通过archetype:generate生成项目。这本不是一问题,官方的QuickStart:http://appfuse.org/display/APF/AppFuse+QuickStart 页面上给出了帮助我们生成archetype:generate命令行的工具,不幸的是这个页面引用了一些位于googleapis.com上的js文件,中国的小朋友们可能获取不了这些文件(原因你懂的)。至少在写作这篇文章的时候googleapis.com是无法从国内訪问的。假设缺少这些JS文件,页面就不能自己主动生成命令行了,尽管这个命令本身并不复杂,可是手写出它的archetypeRepository地址和archetypeArtifactId还是非常费力的,以下给出四个演示样例,可依此为蓝本进行改动:

演示样例一:建立名称为demo的基于spring mvc+spring+hibernate的单一project,appfuse版本号:3.0.0

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring-archetype -DarchetypeVersion=3.0.0 -DgroupId=com.yourcompany -DartifactId=demo -DarchetypeRepository=https://oss.sonatype.org/content/repositories/appfuse 

演示样例二:建立名称为demo的基于spring mvc+spring+hibernate的单一project,appfuse版本号:3.0.1-SNAPSHOT

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring-archetype -DarchetypeVersion=3.0.1-SNAPSHOT -DgroupId=com. yourcompany -DartifactId=demo -DarchetypeRepository=https://oss.sonatype.org/content/repositories/appfuse

演示样例三:建立名称为sample的基于spring mvc+spring+hibernate的多模块project。appfuse版本号:3.0.0
 

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-spring-archetype -DarchetypeVersion=3.0.0 -DgroupId=com. yourcompany -DartifactId=sample -DarchetypeRepository=https://oss.sonatype.org/content/repositories/appfusec 

演示样例四:建立名称为sample的基于spring mvc+spring+hibernate的多模块project,appfuse版本号:3.0.1-SNAPSHOT
 

mvn archetype:generate -B -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-modular-spring-archetype -DarchetypeVersion=3.0.1-SNAPSHOT -DgroupId=com. yourcompany -DartifactId=sample -DarchetypeRepository=https://oss.sonatype.org/content/repositories/appfusec

生成项目之后。依照官方文档的指导非常easy就能够build并运行新建立起来的project了。可是假设你不走运的话,就可能会遇到例如以下一些问题:

问题与解决方法

问题一:

使用3.0.0版本号,运行mvn appfuse:full-source失败,使用 mvn appfuse:full-source -e查看错误信息。报例如以下错误:

[ERROR] Failed to execute goal org.appfuse.plugins:appfuse-maven-plugin:3.0.0:full-source (default-cli) on project demo: Execution default-cli of
 goal org.appfuse.plugins:appfuse-maven-plugin:3.0.0:full-source failed: java.net.UnknownHostException: raw.github.com: Unknown host raw.github.com

解决方法:

对于该问题,appfuse的作者在http://appfuse.547863.n4.nabble.com/Appfuse-failed-to-get-full-source-td4657086.html 中给出了解释,原因是github更改的子域名导致的。为此作者新建了一个3.0.1-SNAPSHOT版本号来解决这一问题。

就我个人的使用情况来看这是一个非常奇怪的问题。第一次运行mvn appfuse:full-source确实遇到了这一问题。第二天就没有问题了,理论上raw.github.com会重定向到新的目标域名,可是看起来受到网络以及配置的种种原因,这个问题确实是有可能发生的。只是使用3.0.1-SNAPSHOT版本号并不是是一个好的解决方法,接下来的常见问题二就是发生在3.0.1-SNAPSHOT版本号上的。

问题二: 

使用3.0.1-SNAPSHOT版本号。运行mvn jetty:run时报例如以下错误:

java.lang.IllegalStateException: org.slf4j.LoggerFactory could not be successfully initialized.

解决方法:

这个问题确实是开发人员给使用者挖的一个“坑”,只从报错日志上非常难找到直接原因,可是日志中的一行信息:

An API incompatibility was encountered while executing org.eclipse.jetty:jetty-maven-plugin:xxxxxx:run: java.lang.ExceptionInInitializerError: null

多少还是给了我们一些线索。检查使用3.0.1-SNAPSHOT版本号生成的pom.xml文件,我们发现jetty插件的配置是这种:

<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.14.v20131031</version>
<configuration>
<webApp>
<contextPath>/</contextPath>
</webApp>
</configuration>
</plugin>

再细致地检查,我们就会发现jetty迁移eclipse之后,其版本号是从9.0.0開始的,根本没有8.1.14.v20131031这个版本号,而这个8.1.14.v20131031版本号是怎么来的呢?看看3.0.0的pom.xml我们找到了答案:

<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.14.v20131031</version>
<configuration>
<webApp>
<contextPath>/</contextPath>
</webApp>
</configuration>
</plugin>

8.X版本号的jetty还是其在mortbay下时的版本号。非常显然,作者在从3.0.0向3.0.1-SNAPSHOT升级的时候,配错了jetty的版本号!

这样,解决方法也就出来了,把插件配置中的<groupId>org.eclipse.jetty</groupId>改为<groupId>org.mortbay.jetty</groupId>就能够了。

问题三:

乱码

解决方法

请參考还有一篇文章:AppFuse 3的乱码问题


建议

因为3.0.1-SNAPSHOT尚处于开发阶段,在不同一时候期使用可能会出现不同的问题,前文提及的第二个问题就是一个样例,因此建议先使用3.0.0版。

AppFuse 3常见问题与解决方法的更多相关文章

  1. NHibernate常见问题及解决方法

    NHibernate常见问题及解决方法 曾经学过NHibernate的,但是自从工作到现在快一年了却从未用到过,近来要巩固一下却发现忘记了许多,一个"in expected: <end ...

  2. C#用ado.net访问EXCEL的常见问题及解决方法

    C#用ado.net访问EXCEL的常见问题及解决方法,除了像sql server,access常见的数据库,其实Excel文件也可以做为数据库访问. ado.net访问excel的实例: OleDb ...

  3. Nacos 常见问题及解决方法

    Nacos 开源至今已有一年,在这一年里,得到了很多用户的支持和反馈.在与社区的交流中,我们发现有一些问题出现的频率比较高,为了能够让用户更快的解决问题,我们总结了这篇常见问题及解决方法,这篇文章后续 ...

  4. 安装scrapy框架的常见问题及其解决方法

    下面小编讲一下自己在windows10安装及配置Scrapy中遇到的一些坑及其解决的方法,现在总结如下,希望对大家有所帮助. 常见问题一:pip版本需要升级 如果你的pip版本比较老,可能在安装的过程 ...

  5. python网络爬虫(1)——安装scrapy框架的常见问题及其解决方法

    Scrapy是为了爬取网站数据而编写的一款应用框架,出名,强大.所谓的框架其实就是一个集成了相应的功能且具有很强通用性的项目模板. 其实在Linux和 Mac安装,就简单的pip命令即可: pip i ...

  6. 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法

    Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...

  7. 转:SVN常见问题与解决方法

    今天发现一个SVN很奇葩的问题.原来SVN提交的时候也是识别提交路径的大小写的... 发现网上有篇博客总结的挺好的.转载下来,转载出路:http://blog.csdn.net/shinn613/ar ...

  8. php常见问题以及解决方法

    在使用php的过程中,经常会出现一些问题,下面是我遇到的一些问题以及解决方法 1,乱码问题,中文乱码问题 原因是:编码方式不一样,有UTF-8,gbk-2312等编码方式,不同的编码方式导致浏览器在解 ...

  9. Direct3D11学习:(零)常见问题及解决方法整理

    转载请注明出处:http://www.cnblogs.com/Ray1024   一.概述 在D3D11学习的这个系列中,单独写一篇文章来记录自己学习过程中遇到的问题及最后的解决方法. 这篇文章的目的 ...

随机推荐

  1. 313 Super Ugly Number 超级丑数

    编写一段程序来寻找第 n 个超级丑数.超级丑数是指其所有质因数都在长度为k的质数列表primes中的正整数.例如,[1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] ...

  2. 为什么选择Sqoop?(三)

    为什么选择 Sqoop? 通常基于三个方面的考虑: 1.它可以高效.可控地利用资源,可以通过调整任务数来控制任务的并发度.另外它还可以配置数据库的访问时间等等. 2.它可以自动的完成数据类型映射与转换 ...

  3. Laravel5.1学习笔记12 系统架构4 服务容器

    Service Container 介绍 绑定的用法  绑定实例到接口 上下文绑定 标签 解析 容器事件 #介绍 The Laravel service container is a powerful ...

  4. html5——3D案例(立体汉字,旋转导航)

    1.立体汉字:旋转点left,attr(data-cont)可获取自定义属性值,skewY(倾斜转换)参考地址 2.旋转导航:先移动后旋转,li标签需要延迟执行旋转 注意::hover事件触发自己的: ...

  5. (转)Hibernate关联映射——一对多(多对一)

    http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射——一对多(多对一) 我们以客户(Customer)与 ...

  6. JavaFX桌面应用开发-鼠标事件和键盘事件

    鼠标相关事件的操作初始代码 package application; import javafx.application.Application;import javafx.event.ActionE ...

  7. C#文件路径问题

    一丶声明的文件路径 @"/Upload\\" + timeStr + @"\\" + fileName; \\ 中第一个\是转义符 \\表示的是一个字符 即'\ ...

  8. C#当中的out关键字(借鉴于CSDN)

    一丶与ref关键字一样,out关键字也是按引用来传递的.out 关键字会导致参数通过引用来传递.这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化.若要使用 out 参数 ...

  9. Python 内置函数 day4

    import random s = 'abczfg' st= {3,4,9,1,8} print(dir(random))#打印模块内的方法,输出模块/变量可以调用的方法 print(dir(s))# ...

  10. WING IDE 快捷键

    工欲善其事必先利其器,所以我们无论使用什么编译器,都要熟悉一些快捷键. Ctrl+N新建文件 Ctrl+O 打开文件夹 Ctrl+W 关闭当前文件 Ctrl+S 保存文件 Ctrl+shif+S 另存 ...