ドキュメントを見ると、DropWizardはsrc / main/resourcesにある静的コンテンツしか提供できないようです。静的ファイルをjarファイルの外部の別のディレクトリに保持したいと思います。それは可能ですか?または、ほとんどの人が静的コンテンツにnginx / Apacheを使用していますか?
6 に答える
はい、できます。このプラグインを使用してください-https://github.com/bazaarvoice/dropwizard-configurable-assets-bundle
Marcello Nuccioの答えに基づいて作業しましたが、それを正しく理解するのに1日の大半を費やしたので、ここでもう少し詳しく説明します。
私がこのディレクトリ構造を持っているとしましょう:
- my-dropwizard-server.jar
- staticdocs
- 資産
- image.png
- 資産
次に、これを機能させるためにあなたがしなければならないことです:
1)dropwizard Applicationクラスで、新しいAssetsBundleを追加します。アセットを別のURLから提供する場合は、2番目のパラメーターを変更します。
@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)このステップは完全にオプションです。別のルートパス(「アプリ」など)からJersey RESTリソースを提供する場合は、構成YMLに以下を追加します。
server:
rootPath: /app/*
これで、次のように静的コンテンツにアクセスできます。たとえば、次のようになります。
localhost:8080/assets/image.png
ユーザーマニュアルには次のように書かれています。
拡張AssetsBundleコンストラクターを使用して、ルートパスからアセットフォルダー内のリソースを提供します。
つまり、ファイルはクラスパスからリソースとしてロードされます。次に、サービスのクラスパスを適切に設定するだけで済みます。
デフォルトの構成では、これは、ドキュメントルートを呼び出し、ドキュメントルートassets
の親フォルダーをクラスパスに配置する必要があることを意味します。その後、たとえば、assets/foo.html
で利用可能になります
http://localhost:8080/assets/foo.html
dropwizard-configurable-assets-bundle
公式のdropwizardバンドルで最新の状態が維持されています。githubhttps ://github.com/dropwizard-bundles/dropwizard-configurable-assets-bundleで見つけることができます。現在のバージョンはdropwizard0.9.2をサポートしています
これは、任意のファイルシステムパスから静的ファイルを提供するために使用できます。
静的コンテンツを提供するWebサイトの大部分は、専用Webサーバー、または大規模な場合はCDNを介して提供します。
場合によっては、Dropwizardの出番であるすべてのアセットを備えた、自己完結型のユニットとしてアプリケーションをデプロイしたい場合があります。
Dropwizardにクラスパスの外部からアセットを提供させることは可能ですが、これを行う最も簡単な方法は、外部で構成されたファイルパスから読み取る独自のアセットエンドポイントを作成することです。
クラダックの答えを補足するために:正解です。クラスパスにアセットを追加する限り、通常のAssetsBundleを使用できます。gradleとoneJarを使用する場合は、oneJarタスクでクラスパスにディレクトリを追加できます。
task oneJar(type: OneJar) {
mainClass = '...'
additionalDir = file('...')
manifest {
attributes 'Class-Path': '.. here goes the directory ..'
}
}