Пристани правильно работает через Maven, но неправильно, как банку

(Если мой заголовок вводит в заблуждение / неверен, пожалуйста, предложите что-то более описательное, что я мог бы придумать лучше)

Я создал собственное веб-приложение с использованием Spring Roo, и мне еще предстоит редактировать любой код. Я создаю и запускаю веб-приложение с Maven и Jetty. Когда я выполняю следующее, все работает нормально.

mvn jetty:run

Однако, когда я упаковываю и затем запускаю флягу непосредственно, я сталкиваюсь с некоторыми странными проблемами.

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

(То же самое с "Mvn Jetty: Run-Exploded")

Главная страница загружается как надо, но когда я нажимаю одну из навигационных ссылок (чтобы создать или перечислить мои модели), я получаю эти ошибки, напечатанные в браузере (http://localhost:8080/pages/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

2 ответа

Решение

Посмотрев на ваш pom.xmlПонятно, что вы используете разные версии Jetty. Это может или не может быть основной причиной вашей проблемы, но поскольку разные версии реализуют разные версии спецификации Servlet Container, вы можете обнаружить, что что-то, что является функцией Servlet 3.0, работает с Jetty 8 и не работает с Jetty 7 (который является сервлетом 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 будет использовать Jetty 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 Вы используете Jetty 7.4.5.v20110725

Как уже сказал кто-то другой, вы используете EL 2.2, который на самом деле является функцией Servlet 3.0, поэтому, возможно, вам просто нужно перейти на более новую версию Jetty Runner.

Я получил ту же ошибку, и я решил. Ваш вопрос неверный.

Это связано с парсером выражений. Вы использовали

#{applicationBean.getColumnName(column)}

в ваше имя Meaning.xhtml. Это не допустимый EL для этого парсера. Либо вам нужно изменить, как

#{applicationBean.getColumnName} 

и передать параметр как

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

или используйте парсер el-api-2.2.jar на пристани.

Другие вопросы по тегам