1. 程式人生 > >AppFuse 3常見問題與解決方法

AppFuse 3常見問題與解決方法

新建 配置 ng- fuse contex ext 什麽 article ger

非常長一段時間沒做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常見問題與解決方法