AppFuse 3常见问题与解决方法

Posted yxysuanfa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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版本号来解决这一问题。

就我个人的使用情况来看这是一个非常奇怪的问题。第一次运行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常见问题与解决方法的主要内容,如果未能解决你的问题,请参考以下文章

appfuse vs roo - 你会用啥

学习 AppFuse

请问appfuse是怎么回事

在 Jax Rs / Appfuse 应用程序中获取 HttpServletRequest?

Vue报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object 的解决方法(代码片段

如何在 Eclipse 中正确设置由 appfuse 创建的多模块 SpringMVC 应用程序?