Создание файла Webapp War — ошибка, этот параметр будет проигнорирован

#grails

#grails

Вопрос:

Я пытаюсь запустить проект на Tomcat7, который требует некоторых плагинов и написан на Grails.

Создание -war с помощью команды grails prod war приводит к ошибке, которая сообщает мне, что параметр типа [java.util.List] не поддерживается.

Где и как я могу узнать, какие параметры поддерживаются, а почему List нет?

файл журнала с ошибками выглядит следующим образом:

 | Loading Grails 2.4.1
| Configuring classpath
| Configuring classpath.
| Environment set to production
| Environment set to production.
| Environment set to production..
| Environment set to production...
| Environment set to production....
| Environment set to production.....
| Packaging Grails application
| Packaging Grails application.
| Packaging Grails application..
| Packaging Grails application...
| Packaging Grails application....
| Packaging Grails application.....
| Compiling 70 source files
| Warning The [listFullAccessResources] action in [VsGrantController] accepts a parameter of type [java.util.List].  Interface types and abstract class types are not supported as command objects.  This parameter will be ignored.

       List listFullAccessResources(VsUser loggedInUser, List resultsGoups) {
       ^
  [groovyc] org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
  [groovyc] General error during class generation: java.lang.NoClassDefFoundError: Unable to load class org.jets3t.service.impl.rest.httpclient.RestS3Service due to missing dependency org/apache/http/client/methods/HttpHead
  [groovyc] 
  [groovyc] java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load class org.jets3t.service.impl.rest.httpclient.RestS3Service due to missing dependency org/apache/http/client/methods/HttpHead
  [groovyc]     at org.codehaus.groovy.control.CompilationUnit.convertUncaughtExceptionToCompilationError(CompilationUnit.java:1083)
 

VsGrantController.groovy выглядит следующим образом

 import org.apache.commons.lang.StringUtils

class VsGrantController {

    def vsAuthenticateService
    def vsGrantService

    def index = { redirect(action:list,params:params) }

    // the delete, save and update actions only accept POST requests
    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    List listFullAccessResources(VsUser loggedInUser, List resultsGoups) {

        // labels user has full access to
        def cLabels = VsLabel.createCriteria()
        def resultsLabelsFullAccess = cLabels.listDistinct {
            grants {
                and {
                    permission {
                        eq("name", 'Full')
                    }
                    or {
                        eq("accessor", loggedInUser)
                        if(resultsGoups) {
                            or {
                                for (g in resultsGoups) {
                                    eq("accessor", g)
                                }
                            }
                        }
                    }
                }
            }
            order("name")
        }
 

Я новичок в теме Grails / Groovy Tomcat
Webbapp, поэтому я надеюсь, что этот вопрос не так уж плох

Ответ №1:

Предупреждение «Типы интерфейсов и типы абстрактных классов не поддерживаются как командные объекты». жалуется, потому что у вашего действия контроллера есть List resultsGoups параметр. Это не поддерживается.

Вы можете извлечь параметры из неявной карты параметров или с помощью объекта command.

Что-то вроде этого…

 def listFullAccessResources(AccessResourcesCommand cmd) {
}

class AccessResourcesCommand {
    Bar loggedInUser
    List resultsGroups
}
 

Комментарии:

1. Или пометить метод закрытым, если это метод внутреннего контроллера.

Ответ №2:

Ваша фактическая ошибка

 Unable to load class org.jets3t.service.impl.rest.httpclient.RestS3Service due to missing dependency org/apache/http/client/methods/HttpHead
 

Вам необходимо включить httpclient.jar в пути к классу

Комментарии:

1. Спасибо за быстрый ответ. хорошо, если я проигнорирую предупреждение и добавлю httpclient.jar — сообщение об ошибке изменится на: Unable to load class org.jets3t.service.impl.rest.httpclient.RestS3Service due to missing dependency org/apache/http/HttpRequest

2. также добавлено ok httpcore.jar который исправил Ошибки… но предупреждение все еще существует

Ответ №3:

Измените его на:

 def List listFullAccessResources(VsUser loggedInUser, List resultsGoups)
 

и ваше предупреждение исчезнет…