在看着the documentation,看起来DropWizard只能提供生活在src/main/resources中的静态内容。我想将我的静态文件保存在jar文件之外的单独目录中。那可能吗?或者大多数人使用nginx/Apache作为静态内容?DropWizard可以从jar文件外部提供资产吗?
回答
绝大多数服务于静态内容的网站都是通过专用的网络服务器,或者在更大规模的情况下通过CDN。
有时,你可能希望将应用程序部署为完成这也正是Dropwizard进来所有资产独立单元。
有可能获得Dropwizard从类路径之外提供了资产,但最简单的方法是编写自己的资产端点,以从外部配置的文件路径中读取。
的user manual说:
使用扩展AssetsBundle构造服务资源资产从文件夹的根路径。
即文件作为资源从类路径加载。然后你只需要正确设置服务的类路径。
使用默认配置时,这意味着您需要调用文档根assets
,并将文档根目录的父文件夹放在类路径中。然后,例如,assets/foo.html
将可在
http://localhost:8080/assets/foo.html
这很好,如果你的静态资产真的是HTML文件。如果它们是大文件,二进制文件或压缩文件,最好将它们保存在jar文件之外。 –
@ CraigP.Motlin,单个jar文件的一大优点是易于部署:只需复制一个文件,所有内容都会更新并保证可以在临时服务器上工作。通常最大的缺点是需要在生产服务器上上传一个大文件。要解决这个问题,我使用'rsync'来更新最新部署文件的中间副本。这是非常快速和可靠的。 –
@ CraigP.Motlin,澄清:我不是说所有的资产都放在罐子里。正如我在我的回答中所说的,您只需将资源文件夹添加到类路径中。换句话说:将资产文件夹放在任何你喜欢的地方,唯一的要求是它可以在类路径中找到。 –
工作过马塞洛Nuccio的回答,它仍然采取了我一天的大部分时间得到它的权利,所以这是我在一个更详细一点做。
比方说,我有这样的目录结构:
- 我-dropwizard-的server.jar
- staticdocs
- 资产
- image.png
- 资产
然后这就是你要做的工作:
1)在你的dropwizard Application类中,添加一个新的AssetsBundle。如果您希望您的资产通过其他网址提供,请更改第二个参数。
@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资源(例如,“应用程序”),以下内容添加到您的配置阳明:
server:
rootPath: /app/*
现在,您可以访问您喜欢这个静态内容,例如:
localhost:8080/assets/image.png
通过将'assets'文件夹放入'src/main/resources'中,可以避免使用'maven-jar-plugin'。 –
但是这会将资产打包到jar中,不是吗?这个问题的重点是从罐子的外部提供资产。 – craddack
你是对的。重要的一点是:将您的资产放在任何你喜欢的地方,但要确保它们在类路径中找到。这是唯一的要求。 –
为了补充craddack的回答:正确,只要您将资源添加到类路径中,就可以使用常规AssetsBundle。 如果使用gradle产出和oneJar,您可以在oneJar任务添加目录到classpath:
task oneJar(type: OneJar) {
mainClass = '...'
additionalDir = file('...')
manifest {
attributes 'Class-Path': '.. here goes the directory ..'
}
}
有维持在官方dropwizard,捆绑了高达最新dropwizard-configurable-assets-bundle
。你可以在github https://github.com/dropwizard-bundles/dropwizard-configurable-assets-bundle找到它。当前版本支持dropwizard 0.9.2
这可用于从任意文件系统路径提供静态文件。
我正在寻找更新天!谢谢!! – Olesia
- 1. webview可以读取外部资产文件夹中的文件吗?
- 2. 我可以为宝石内的资产提供服务吗
- 3. 我可以从外部文件中提取html内容吗?
- 4. 从外部库提供静态文件
- 5. JavaFX外部目录和jar文件以外的资源
- 6. Heroku不提供资产文件
- 7. 在jar外部加载资源文件
- 8. 从JAR文件外部加载资源文件
- 9. 我可以从3目录深的jar中提取文件吗?
- 10. 可以从外部xml文件读取web.config文件吗?
- 11. 可以getResourceAsStream()查找jar文件之外的文件吗?
- 12. Rails 3 - 从资产服务器提供资产时出现故障吗?
- 13. 自我可执行的JAR和外部的财产文件
- 14. Apache/PHP可以从另一台服务器提供文件吗?
- 15. 从外部JAR无法检索资源文件
- 16. 从java访问外部.jar资源
- 17. 我可以将可执行JAR文件部署到Azure PaaS吗?
- 18. 仍然可以从控制器外部提供服务AngularJs
- 19. 从cmd中引用外部jar文件运行jar文件
- 20. 如何配置Tomcat从webapps以外的外部文件夹提供图片?
- 21. 从外部Jar加载属性文件
- 22. 从InputStream加载外部.jar文件
- 23. jar从外部读取文件
- 24. Android - 从外部jar读取txt文件
- 25. 从pentaho执行外部jar文件
- 26. 是否可以仅编译/提供一部分资产?怎么样?
- 27. 从swf文件中提取资产?
- 28. 我可以从外部文件只导入一段html吗?
- 29. SQLiteOpenHelper可以从外部文件加载表脚本吗?
- 30. 可以从外部文件运行openoffice宏吗?
你不需要任何插件。只需[在类路径中添加文档根目录](http://stackoverflow.com/a/22221194/453605)。 –
不幸的是,这个插件已老化,并且只支持0.7。它可能只是一个更改为插件使用更新的Dropwizard(io.dropwizard)类路径的问题,但我没有尝试过。任何其他现成的答案? – Joel
是的,请按照下面我回答中列出的步骤操作。 – craddack