Может ли DropWizard обслуживать активы за пределами файла jar? - программирование

Может ли DropWizard обслуживать активы за пределами файла jar?

При взгляде на документацию, похоже, что DropWizard может обслуживать статический контент, живущий в src/main/resources. Я хотел бы сохранить свои статические файлы в отдельном каталоге вне файла jar. Это возможно? Или большинство людей используют nginx/Apache для своего статического контента?

4b9b3361

Ответ 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 ..'
  }
}

см. https://github.com/rholder/gradle-one-jar