2016-10-26 6 views
0

Я использовал плагин maven для создания военного файла для моей структуры проекта. И теперь, когда я запускаю этот военный файл, я получаю ошибкуОшибка при выполнении WAR-файла

Error: Could not find or load main class com.abc.HelloWorld.App 

По какой-то причине, когда я проверяю архив войны, мой основной класс становится генерироваться под WEB-INF/classes/com/abc/HelloWorld/

Я попытался добавил путь к классам Manifest.MF файл, но это не помогло.

Вот мой плагин maven для создания файла войны. Также этот проект содержит встроенный сервер причалов.

<plugin> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <webXml>WebContent\WEB-INF\web.xml</webXml> 
    <warName>${project.artifactId}-${project.version}</warName>    
    <archive> 
     <manifest> 
     <addClasspath>true</addClasspath> 
     <mainClass>com.infor.HelloWorld.App</mainClass> 
     </manifest> 
    </archive> 
    <overlays> 
    <overlay> 
    <id>com.abc.HelloWorld</id>  
    <type>jar</type> 
    </overlay> 
    </overlays> 
    </configuration> 
    <executions> 
    <execution> 
     <id>default-war</id> 
     <phase>package</phase> 
     <goals> 
     <goal>war</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Я пробовал this question, но это не помогло.

ответ

1

Файлы WebApp WAR являются специализированными файлами jar, упакованными для веб-контейнеров для развертывания.

Вы можете иметь прямоприменяемую войну файл, но вы будете наматывать имея WAR-файл, который перекрывается поведение JAR, так что META-INF/MANIFEST.MF и его Main-Class может создать экземпляр Jetty, а затем загрузить в самом вебе-приложении в этот экземпляр сервера ,

Посмотрите на следующий проект, поддерживаемый проектом Jetty.

https://github.com/jetty-project/embedded-jetty-live-war

Важно быть осторожными, когда:

  • объединения классов сервера в файл WAR, чтобы не сделать сбой развертывания веб-приложения (для перекрытия классов между сервером классами и WebAPP классами).
  • присоединяемых META-INF/services/ файлы
  • не подвергая слишком много Server стороны самого-исполняемого к HTTP-клиенты (не позволяйте им ничего скачивать чувствительное!) - это может быть достигнуты путем ввода части сервера этого запуска в /WEB-INF/ каталог
  • вы не хотите иметь WebAPP (войны) запуска ходьбу и зная о компонентах сервера (это может привести к двойной инициализации, один раз в загрузчик классов сервера, и еще раз в WebAPP загрузчиком классов)

Как указано в этом проекте:

Этот проект должен служить базой для тех, кто исследует использование встроенного причала с точки зрения файла самообучения WAR.

Проект состоит из 4 основных частей:

  • /thewebapp/ - это файл WAR, веб-приложение, как она существует в своем собственном формате, с нормальными мавенна <packaging>war</packaging> и изготавливаемым артефактом, который просто WAR файл это еще не самообучение.
  • /theserver/ - это встроенный сервер Jetty jetty.livewar.ServerMain.main(String args[]), который вы настраиваете для инициализации сервера Jetty и его WebApp. Этот проект также является местом, где вы настраиваете такие вещи, как библиотеки серверов JDBC, JNDI, протоколирование и т. Д.В этом проекте создается uber-jar со всеми зависимостями, необходимыми для запуска сервера. Особое внимание уделяется maven-shade-plugin, чтобы объединить файлы META-INF/services/.
  • /server-bootstrap/ - это содержит 2 небольших класса, которые устанавливают LiveWarClassLoader из содержания в живой WAR, а затем запускают jetty.livewar.ServerMain.main(String args[]) с этого нового ClassLoader. Этот проект также содержит живую META-INF/MANIFEST.MF, что живая война понадобится/будет использоваться
  • /livewar-assembly/ - это проект, который связывает вышеуказанные 3 проекта в файл WAR/Executable WAR. Артефакты из вышеупомянутых 3 проектов распаковываются maven-assembly-plugin и устанавливаются на место, где они будут наиболее функциональными (и безопасными). Например, классы сервера от /theserver/ помещаются в /WEB-INF/jetty-server/, чтобы сделать их недоступными из веб-клиентов, обращающихся к файлу WAR.

Примечания: есть 3 файла присутствует в новом собранном WAR файл, который вы должны знать, что эти файлы могут быть загружены с помощью веб-клиента, как статический контент, если вы используете эту установку.

  • /jetty/bootstrap/JettyBootstrap.class
  • /jetty/bootstrap/LiveWarClassLoader.class
  • /META-INF/MANIFEST.MF

Пример проекта установки таким образом, чтобы информация, которая содержится в этих бутстраповских файлы не должны раскрывать личную или конфиденциальную информацию о вашем сервере или его деятельности , Просто, что Webapp можно запустить как файл WAR/Executable WAR.