Как сделать зависимость Maven доступной для Tomcat? - PullRequest
1 голос
/ 20 декабря 2011

Я пытаюсь «включить» различные Jar / библиотеки в Tomcat 7.0 (обычно я помещаю их в каталог tomcat / lib), чтобы сделать Tomcat JSR 109 совместимым.

Итак, я добавил некоторые зависимости и сделал их «системными», надеясь, что общесистемная зависимость будет доступна для Tomcat при запуске. К сожалению, хотя просмотр пакетов в моем списке зависимостей показывает все классы, которые ищет Tomcat, Tomcat, похоже, не имеет к ним доступа и не знает, где они находятся.

Пожалуйста, сообщите ...

<dependency>
    <groupId>com.sun.xml</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.0EA3</version>
    <scope>system</scope>
    <systemPath>${path.jaxwsrt}</systemPath>
</dependency>

Добавлено примечание: я бы хотел сам Tomcat, а не только приложение, которое он запускает для доступа к нему Примеры:

  • Пружинный Tomcat Instrumentable Classloader
  • Расширения Catalina для ведения журнала Apache Commons и поддержки веб-сервисов

Ответы [ 3 ]

6 голосов
/ 20 декабря 2011

Это не то, что означает системная область.Системная область говорит Maven: «Эта зависимость является частью моей системы. Вам не нужно связывать ее, когда я доставляю артефакт, потому что он уже находится в системе. Вам не нужно загружать его при компиляции или выполнении тестов, потому чтоЯ даю вам путь к этому только здесь. "(Вы должны указать путь для зависимостей области системы.)

Стандартный способ сделать JAR доступным для Tomcat - это поместить их в WAR.Это произойдет, если вы установите область «compile» или «runtime».

Другой подход - поместить JAR-файлы в общий каталог Tomcat и установить их область «предоставлено».Если вы сделаете это, вы запускаете нестандартный дистрибутив Tomcat, и вам нужен процесс для управления этим (в противном случае у вас возникнут проблемы, когда люди не поймут, почему ваше приложение не будет работать на ванильном Tomcat).install).

Краткое напоминание об областях Maven:

compile = "Мне это нужно, когда я компилирую, когда я компилирую тесты, когда я запускаю тесты, и когда я выполняю проект, и вынужно связать его в результате поставки, потому что он еще не находится в среде выполнения ".

runtime =" Мой код будет компилироваться без этого, но он будет искать его во время выполнения, в том числе при выполнении тестов,и он не предоставляется в среде выполнения, поэтому не могли бы вы связать его в поставляемом продукте. "

условии =" Мой код нуждается в этом для компиляции, а также при запуске тестов и в производстве, поэтому он мне нуженв пути к классам для компиляции и тестов, но вам не нужно связывать его, потому что среда выполнения предоставляет его. "

2 голосов
/ 20 декабря 2011

Tomcat не знает о maven или его зависимостях. Если вы хотите изменить поведение tomcat (и не только вашего приложения - т.е. WEB-INF / lib), вам необходимо:

  • запустить tomcat от maven после введения ваших дополнительных зависимостей
  • имеет дополнительный шаг сборки, который развертывает дополнительные библиотеки для «хорошо известной» установки tomcat
  • перепакуйте вашу личную версию tomcat с дополнительными библиотеками, а затем используйте ее для размещения вашего приложения

Во всех случаях это относится к отдельному модулю maven, поскольку он не имеет никакого отношения к вашему приложению. Если вы хотите сделать что-либо из этого, хорошим источником может быть плагин tomcat maven.

0 голосов
/ 20 декабря 2011

Почему вы используете системную область, потому что, если я проверяю maven central , ее можно найти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...