15

在查看文档时,DropWizard 似乎只能提供位于 src/main/resources 中的静态内容。我想将我的静态文件保存在 jar 文件之外的单独目录中。那可能吗?还是大多数人使用 nginx/Apache 作为他们的静态内容?

4

6 回答 6

12

是的,它可以,使用这个插件 - https://github.com/bazaarvoice/dropwizard-configurable-assets-bundle

于 2013-01-17T07:33:46.167 回答
7

根据 Marcello Nuccio 的回答,我仍然花了我一天的大部分时间才把它弄好,所以这里是我做的更详细的事情。

假设我有这个目录结构:

  • 我的dropwizard-server.jar
  • 静态文档
    • 资产
      • 图像.png

那么这就是你必须做的让它工作:

1) 在您的 dropwizard Application 类中,添加一个新的 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) 这一步完全是可选的。如果您想从不同的根路径(例如“app”)提供您的 Jersey REST 资源,请将以下内容添加到您的配置 YML:

server:
  rootPath: /app/*

现在您可以像这样访问您的静态内容,例如:

localhost:8080/assets/image.png
于 2015-06-12T09:14:59.883 回答
4

用户手册说:

使用扩展的 AssetsBundle 构造函数从根路径为 assets 文件夹中的资源提供服务。

即文件作为资源从类路径加载。然后你只需要正确设置服务的类路径。

使用默认配置,这意味着您需要调用文档 root assets,并将文档根目录的父文件夹放在类路径中。然后,例如,assets/foo.html将在

http://localhost:8080/assets/foo.html
于 2014-03-06T10:09:29.963 回答
3

dropwizard-configurable-assets-bundle在官方 dropwizard-bundles 中有一个最新的维护。你可以在 github https://github.com/dropwizard-bundles/dropwizard-configurable-assets-bundle找到它。当前版本支持 dropwizard 0.9.2

这可用于从任意文件系统路径提供静态文件。

于 2016-06-30T09:59:29.577 回答
2

绝大多数提供静态内容的网站都是通过专用的网络服务器,或者更大规模的CDN来实现的。

有时,您可能希望将应用程序部署为一个独立的单元,其中包含 Dropwizard 的所有资产。

可以让 Dropwizard 从类路径外部提供资产,但最简单的方法是编写您自己的资产端点,该端点从外部配置的文件路径中读取。

于 2013-01-15T17:09:24.693 回答
1

为了补充 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

于 2015-06-12T13:58:29.123 回答