Есть ли хороший способ сделать мою войну исполняемой как банку
У нас есть проект, в котором мы создаем веб-приложение, развернутое на JBoss. Maven, упаковка войны и т. Д. Теперь у клиента есть требование, чтобы мы включили интерфейс командной строки для приложения, говоря, что пользователь также должен иметь возможность запускать основной метод где-то внутри войны (независимо от того, является ли приложение в настоящее время развернуто на JBoss или нет).
Я в растерянности. Я искал здесь и много разных поисков в Google, и я нашел примеры Jetty / Jenkins, но эти примеры, похоже, содержат только один файл класса, необходимый для запуска в качестве jar.
В настоящее время структура войны для проекта такова:
-resources
-META-INF
---MANIFEST.MF, et al
-WEB-INF
---web.xml, classes(com/*), lib, et al
У меня Maven настроил файл MANIFEST.MF с Main-Class для класса, который я хочу вызвать, используя java -jar. Но тогда структура войны, похоже, должна следовать "нормальной" структуре банок, например:
-resources
-com/*/main.class
-META-INF
---MANIFEST.MF, et al
-WEB-INF
---web.xml, classes(com/*), lib, et al
Но тогда main.class зависит от других классов в приложении, поэтому я обнаруживаю, что все больше и больше кода размещаю в обоих местах, как для работы с jar, так и для войны.
Итак, я использовал Maven + antrun для копирования файлов классов из WEB-INF/classes в корень файла war. Теперь есть банки, от которых зависят классы (например, log4j). Так что СЕЙЧАС я использую antrun, чтобы разархивировать необходимые файлы, поместив эти файлы классов в корень войны...
Это кажется... сумасшедшим. Есть ли способ лучше?
отредактировано с дополнительной информацией Функциональность CLI должна иметь доступ к базе данных, поэтому, к сожалению, необходимо много классов (все классы DAO/EBO/ конфигурации)