При взгляде на документацию, похоже, что DropWizard может обслуживать статический контент, живущий в src/main/resources. Я хотел бы сохранить свои статические файлы в отдельном каталоге вне файла jar. Это возможно? Или большинство людей используют nginx/Apache для своего статического контента?
Может ли DropWizard обслуживать активы за пределами файла jar?
Ответ 1
да, он может, используя этот плагин - https://github.com/bazaarvoice/dropwizard-configurable-assets-bundle
Ответ 2
Отключение Марчелло Нучио отвечало, мне все же потребовалась большая часть моего дня, чтобы все было правильно, вот что я сделал немного подробнее.
Скажем, у меня есть эта структура каталогов:
- мой-dropwizard-server.jar
- staticdocs
- активы
- image.png
- активы
Тогда это то, что вам нужно сделать, чтобы заставить его работать:
1) В вашем классе Application Droper добавить новый AssetsBundle. Если вы хотите, чтобы ваши активы обслуживались с другого URL-адреса, измените второй параметр.
@Override
public void initialize(Bootstrap<AppConfiguration> bootstrap) {
bootstrap.addBundle(new AssetsBundle("/assets/", "/assets/"));
}
2) Добавьте корень документа в свой путь к классам, настроив maven-jar-plugin следующим образом. (Получение "./staticdocs/" в правильной форме заняло у меня некоторое время. Классы классов неумолимы.)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Class-Path>./staticdocs/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
3) Этот шаг полностью необязателен. Если вы хотите использовать ресурсы REST в Джерси из другого корневого пути (например, "приложение" ), добавьте в свою конфигурацию YML:
server:
rootPath: /app/*
Теперь вы можете получить доступ к своему статическому содержимому, например:
localhost:8080/assets/image.png
Ответ 3
В руководстве пользователя говорится:
используйте расширенный конструктор AssetsBundle для обслуживания ресурсов в папке с ресурсами из корневого пути.
то есть. файлы загружаются как ресурсы из пути к классам. Затем вам нужно только правильно настроить путь к этой службе.
При настройке по умолчанию это означает, что вам нужно вызвать корень документа assets
и поместить родительскую папку корня документа в путь к классам. Тогда, например, assets/foo.html
будет доступен в
http://localhost:8080/assets/foo.html
Ответ 4
Подавляющее большинство веб-сайтов, которые обслуживают статический контент, делают это через выделенный веб-сервер или, в более широком масштабе, CDN.
Иногда вам может понадобиться развернуть приложение как автономное устройство, полное всех активов, в которое входит Dropwizard.
Можно получить Dropwizard для обслуживания активов из-за пределов пути к классам, но самый простой способ сделать это - написать конечную точку вашего конечного объекта, которая читается из внешнего файла пути.
Ответ 5
В официальных папках dropwizard имеется обновленная версия dropwizard-configurable-assets-bundle
. Вы можете найти его в github https://github.com/dropwizard-bundles/dropwizard-configurable-assets-bundle. Текущая версия поддерживает dropwizard 0.9.2
Это может использоваться для обслуживания статических файлов с произвольного пути к файловой системе.
Ответ 6
В дополнение к ответу craddack: Правильно, вы можете использовать обычный AssetsBundle, пока вы добавляете активы в свой путь к классам. Если вы используете gradle и oneJar, вы можете добавить каталог в путь к классам в задаче oneJar:
task oneJar(type: OneJar) {
mainClass = '...'
additionalDir = file('...')
manifest {
attributes 'Class-Path': '.. here goes the directory ..'
}
}