AppFuse 3常见问题与解决方法

千金一刻莫空度,老大无成空自伤。这篇文章主要讲述AppFuse 3常见问题与解决方法相关的知识,希望能为你提供帮助。
非常长一段时间没做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版本号来解决这一问题。
【AppFuse 3常见问题与解决方法】就我个人的使用情况来看这是一个非常奇怪的问题。第一次运行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版。

























































    推荐阅读