Здесь есть два ответа, которые в основном верны в отношении того, как решить эту проблему при использовании Maven при решении этой проблемы. Однако оба не завершены на 100%.
Использование исключений за @ ответ Тома Хантера
Этот ответ работает. Тем не менее, все еще будут сообщения журнала от Tomcat относительно повторяющихся определений TLD. Это связано с тем, что артефакты jstl и jstl-impl включают определения TLD. Чтобы удалить эти сообщения, я думаю, что лучше настроить Maven так:
<dependency>
<version>1.2</version>
<scope>runtime</scope>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
<exclusion>
<artifactId>jsp-api</artifactId>
<groupId>javax.servlet.jsp</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>jstl-impl</artifactId>
<version>1.2</version>
<scope>runtime</scope>
<exclusions>
<exclusion>
<artifactId>servlet-api</artifactId>
<groupId>javax.servlet</groupId>
</exclusion>
<exclusion>
<artifactId>jsp-api</artifactId>
<groupId>javax.servlet.jsp</groupId>
</exclusion>
<exclusion>
<artifactId>jstl-api</artifactId>
<groupId>javax.servlet.jsp.jstl</groupId>
</exclusion>
</exclusions>
</dependency>
Это включает только классы jstl api с необходимыми исключениями, чтобы избежать проблем, описанных в оставшейся части этого ответа.
Использование более новых версий POM для @ ответ Джорджа
Мне потребовалось время, чтобы осознать это, но есть более новые версии JSTL pom. Это действительно сбивает с толку, потому что эти новые пакеты используют похожие, но немного другие соглашения об именах. Эти более новые версии помечают зависимости javax.servlet, javax.jsp и т. Д. Как предоставленную область, поэтому их не нужно исключать. Версия 1.2.1 зависит от версии jstl-api 1.2.1. И вот этот будет работать так же, как и ответ выше:
<dependency>
<groupId>org.glassfish.web</groupId>
<artifactId>javax.servlet.jsp.jstl</artifactId>
<version>1.2.1</version>
<scope>runtime</scope>
</dependency>
Это немного отличается от ответа Джорджа, потому что я изменил область действия на время выполнения. Джордж уточнил сферу, как это предусмотрено. С предоставленной областью действия файлы jar должны быть скопированы вручную в каталог lib Tomcat, или какая-то другая зависимость должна включать необходимую реализацию.
Однако, Я не смог найти версию impl 1.2.1 в maven central, jboss repo или любых других репо. В итоге я ходил кругами и, наконец, просто использовал локальное файловое хранилище для хранения банок. Зависимость и jar описаны здесь: