Я проходил этот учебник некоторое время назад и имел очень схожую проблему. Я пришел с немного другим подходом, который работает для меня очень красиво.
Прежде всего, как уже было сказано ранее, вы должны держать тип вашего POM как jar
(<packaging>jar</packaging>
) - благодаря тому, что, appassembler
плагин будет генерировать JAR файл из ваших классов и добавить его в путь к классам. Таким образом, ваша ошибка исчезнет.
Обратите внимание, что этот учебник Tomcat создается из каталога источника приложения. Во многих случаях этого достаточно, но учтите, что с использованием этого подхода вы не сможете использовать аннотации Servlet @WebServlet
, так как /WEB-INF/classes
в источниках пуст, и Tomcat не сможет сканировать ваши классы сервлета. Так что HelloServlet
сервлет из этого учебника не будет работать, если вы не добавите некоторую дополнительную инициализацию Tomcat (конфигурацию ресурсов), как описано here (Кстати, вы найдете больше вопросов о SO, рассказывающих об этой конфигурации ресурсов).
Я сделал несколько иной подход:
Я бегу org.apache.maven.plugins:maven-war-plugin
плагин (exploded
цели) в течение package
и использования, создавшего каталог как мой исходный каталог приложения. При таком подходе у моего каталога веб-приложений будет /WEB-INF/classes
«заполнено» классами. Это, в свою очередь, позволит Tomcat правильно выполнять работу по сканированию (т. Е. Аннотации сервлета @WebServlet
будут работать).
Я также должен был изменить источник моего приложения в классе пусковую:
public static void main(String[] args) throws Exception {
// Web application is generated in directory name as specified in build/finalName
// in maven pom.xml
String webappDirLocation = "target/embeddedTomcatSample/";
Tomcat tomcat = new Tomcat();
// ... remaining code does not change
Изменения в POM, которые я добавил - включены maven-war-plugin
непосредственно перед appassembler
плагин:
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
...
Обратите внимание, что exploded
Цель называется.
Я надеюсь, что небольшое изменение поможет вам.
еще один комментарий на этом учебнике и Maven сборки: обратите внимание, что учебник был написан, чтобы показать, как просто это создать приложение и запустить его в Heroku. Однако это не лучший подход к сборке maven.
Рекомендация Maven заключается в том, что вы должны придерживаться производства одного артефакта на ПОМ. В вашем случае есть два должны артефакты:
- Tomcat пусковых
- Tomcat веб-приложение
Оба должно быть строить как отдельный РОМ и ссылки как модули из родительского П. Если вы посмотрите на сложность этого учебника, нет смысла разбить его на два модуля. Но если ваши приложения становятся все более сложными (и пусковая установка получает некоторые дополнительные конфигурации и т. Д.), Это будет иметь большой смысл сделать этот «раскол». По сути, есть некоторые библиотеки «Tomcat launcher», которые уже созданы так, что вы можете использовать один из них.
Можете ли вы показать, как выглядит сгенерированный скрипт (.sh/.bat)? – khmarbaise
Сгенерированный скрипт можно увидеть на http://pastebin.com/f9gbVMgx - Основной класс, который не найден, находится в PROJECTROOT/src/org/stopbadware/dsp/ – Exupery