2012-09-03 21 views
1

(如果我的標題是誤導性的/不正確,請建議更具描述性,是最好的,我能想到的)碼頭通過行家運行正確,但錯誤地作爲一個罐子

我創建使用彈簧我自己的web應用程序roo並且還沒有編輯任何代碼。我正在構建並運行帶有maven和jetty的web應用程序。當我執行以下一切正常工作。

mvn jetty:run 

然而,當我打包,然後直接運行jar,我遇到一些奇怪的問題。

mvn package 
java -jar target/dependency/jetty-runner.jar target/*.war 

(有同樣的事情「命令mvn碼頭:運行爆炸」)

主要頁面加載,因爲它應該,但是當我點擊導航鏈接之一(創建或列出我的模型)我結束了這些錯誤打印到瀏覽器(HTTP://本地主機:8080 /頁/ main.jsf)

HTTP ERROR 500 

Problem accessing /pages/main.jsf. Reason: 

/pages/nameMeaning.xhtml @25,80 value="#{applicationBean.getColumnName(column)}" Error Parsing: #{applicationBean.getColumnName(column)} 
Caused by: 

javax.faces.view.facelets.TagAttributeException: /pages/nameMeaning.xhtml @25,80 value="#{applicationBean.getColumnName(column)}" Error Parsing: #{applicationBean.getColumnName(column)} 
at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:401) 
at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:351) 
at com.sun.faces.facelets.tag.jsf.ValueHolderRule$DynamicValueExpressionMetadata.applyMetadata(ValueHolderRule.java:129) 
at com.sun.faces.facelets.tag.MetadataImpl.applyMetadata(MetadataImpl.java:81) 
at javax.faces.view.facelets.MetaTagHandler.setAttributes(MetaTagHandler.java:129) 
at javax.faces.view.facelets.DelegatingMetaTagHandler.setAttributes(DelegatingMetaTagHandler.java:102) 
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.doNewComponentActions(ComponentTagHandlerDelegateImpl.java:398) 
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:159) 
... 
Caused by: javax.el.ELException: Error Parsing: #{applicationBean.getColumnName(column)} 
at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:171) 
at com.sun.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:188) 
at com.sun.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:232) 
at com.sun.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:92) 
at com.sun.faces.facelets.tag.TagAttributeImpl.getValueExpression(TagAttributeImpl.java:385) 
... 95 more 
Caused by: com.sun.el.parser.ParseException: Encountered "(" at line 1, column 32. 
Was expecting one of: 

"}" ... 
"." ... 
"[" ... 
">" ... 
"gt" ... 
"<" ... 
"lt" ... 
">=" ... 
"ge" ... 
"<=" ... 
"le" ... 
"==" ... 
"eq" ... 
"!=" ... 
"ne" ... 
"&&" ... 
"and" ... 
"||" ... 
"or" ... 
"*" ... 
"+" ... 
"-" ... 
"?" ... 
"/" ... 
"div" ... 
"%" ... 
"mod" ... 


at com.sun.el.parser.ELParser.generateParseException(ELParser.java:1664) 
at com.sun.el.parser.ELParser.jj_consume_token(ELParser.java:1544) 
at com.sun.el.parser.ELParser.DeferredExpression(ELParser.java:147) 
at com.sun.el.parser.ELParser.CompositeExpression(ELParser.java:74) 
at com.sun.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:139) 
... 99 more 
Caused by: 

請看這裏pom.xml文件:http://pastebin.com/6aPpYP47

+1

你需要證明至少有一些人是你的''pom.xml' ...例如''部分(至少是引用jetty的部分)和''部分。否則這個問題幾乎是不可能的,因爲 –

+0

@Stephen康諾利 - 對不起,我已經添加了一個鏈接到pom.xml。你可以在這裏看到它:http://pastebin.com/6aPpYP47 – kburns

回答

2

看了看你的pom.xml很明顯你正在運行不同版本的Jetty。這可能是也可能不是你問題的根源,但由於不同版本實現了Servlet容器規範的不同版本,你可能會發現某些Servlet 3.0特性適用於Jetty 8,並且不適用於Jetty 7(也就是Servlet 2.5 IIRC)

如果你看看你的插件配置:

 <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>8.1.4.v20120524</version> 
      <configuration> 
       <webAppConfig> 
        <contextPath>/${project.name}</contextPath> 
       </webAppConfig> 
      </configuration> 
     </plugin> 

當你注入碼頭亞軍你會發現,jetty:run將使用碼頭8.1.4.v20120524

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-dependency-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
      <execution> 
       <phase>package</phase> 
       <goals><goal>copy</goal></goals> 
       <configuration> 
       <artifactItems> 
        <artifactItem> 
        <groupId>org.mortbay.jetty</groupId> 
        <artifactId>jetty-runner</artifactId> 
        <version>7.4.5.v20110725</version> 
        <destFileName>jetty-runner.jar</destFileName> 
        </artifactItem> 
       </artifactItems> 
       </configuration> 
      </execution> 
      </executions> 
     </plugin> 

並與java -jar jetty-runner.jar namename.war運行使用的是碼頭7.4.5.v20110725

正如別人指出你正在使用EL 2.2這實在是一個Servlet 3.0功能,所以也許你只需要升級到一個newer version of jetty runner

+0

嘿,這工作和解決了原來的問題。感謝您幫助noob。對此,我真的非常感激! – kburns

+0

我有同樣的問題,我用於碼頭運動員的版本是迄今爲止的最新版本(8.1.6.v20120903)。我只有一些在澤西島實施的Web服務(沒有容器或其他任何東西)。一切運行良好與maven碼頭:運行,但調用我的網絡服務通過jar文件執行時返回HTTP錯誤404。任何提示? – Abbas

+0

最新並不總是最好的。你也確定你有maven plugin和jetty runner的相同版本嗎?另一個問題可能是jetty:run的類路徑可能會有微妙的差異......您是否嘗試過jetty:run-war以驗證打包的戰爭是否有效?除此之外,我從你提供的零信息中可以得到的信息並不多 –

2

我得到了同樣的呃ror和我解決了。你的問題是錯誤的。

這是由於Expression Parser。您已使用

#{applicationBean.getColumnName(column)} 

在您的nameMeaning.xhtml。對於該解析器來說,它不是有效的EL。無論是u需要改變像

#{applicationBean.getColumnName} 

,並通過PARAM像

<f:param name="column" value="#{column}"/> 

或碼頭使用EL-API-2.2.jar解析器。

+0

el-api是在pom.xml中,我在這裏發佈了它的一個副本:http://pastebin.com/6aPpYP47 – kburns

+1

但不是在pom外。 – bmargulies

+0

這個問題沒有錯,問題在於'jetty:run'正在使用來自'java -jar jetty-runner.jar target/*。war'的不同版本的jetty,而這些不同版本正在實現不同版本的EL規範,因此它在'jetty:run'中使用,它使用Servlet 3.0,因此使用EL 2.2,但不使用'java -jar jetty-runner.jar target/*。war',它使用Servlet 2.5,因此使用JSP 2.1這是有效的EL 2.1 –

相關問題