In Blick auf the documentation scheint es, dass DropWizard nur statischen Inhalt in src/main/resources dienen kann. Ich möchte meine statischen Dateien in einem separaten Verzeichnis außerhalb der JAR-Datei behalten. Ist das möglich? Oder verwenden die meisten Leute nginx/Apache für ihren statischen Inhalt?Kann DropWizard Assets von außerhalb der JAR-Datei bereitstellen?
Antwort
ja, können sie es, mit diesem Plugin - https://github.com/bazaarvoice/dropwizard-configurable-assets-bundle
Die meisten Websites, die statische Inhalte bereitstellen, tun dies über einen dedizierten Webserver oder, in größerem Maßstab, eine CDN.
Gelegentlich möchten Sie vielleicht eine Anwendung als eigenständige Einheit komplett mit allen Assets bereitstellen, die sich in dem Dropwizard kommt.
Es ist möglich, Dropwizard zu bekommen Vermögen von außerhalb des Classpath zu dienen, aber Der einfachste Weg dazu besteht darin, einen eigenen Asset-Endpunkt zu schreiben, der von einem extern konfigurierten Dateipfad liest.
Die user manual sagt:
einen erweiterten AssetsBundle Konstruktor verwenden, um Ressourcen im Anlagenordner aus dem Stammpfad zu dienen.
, d.h. die Dateien werden als Ressourcen aus dem Klassenpfad geladen. Dann müssen Sie nur den Klassenpfad für den Dienst ordnungsgemäß festlegen.
Mit der Standardkonfiguration bedeutet dies, dass Sie den Dokumentstamm assets
aufrufen müssen und den übergeordneten Ordner des Stammverzeichnisses in den Klassenpfad einfügen müssen. Dann zum Beispiel assets/foo.html
werden bei
http://localhost:8080/assets/foo.html
Dies ist in Ordnung, wenn Ihre statischen Assets wirklich HTML-Dateien sind. Wenn es sich um große, binäre oder komprimierte Dateien handelt, sollten Sie sie außerhalb der JAR-Datei aufbewahren. –
@ CraigP.Motlin, Der große Vorteil der einzelnen JAR-Datei ist die einfache Bereitstellung: Kopieren Sie einfach eine einzige Datei und alles ist aktualisiert und garantiert wie auf Staging-Server arbeiten. Der größte Nachteil ist oft die Notwendigkeit, eine große Datei auf den Produktionsserver hochzuladen. Um dies zu umgehen, verwende ich 'rsync', um eine Zwischenkopie der neuesten bereitgestellten Datei zu aktualisieren. Dies ist sehr schnell und zuverlässig. –
@ CraigP.Motlin, um zu verdeutlichen: Ich sage nicht, alle Vermögenswerte in das Glas zu setzen. Wie ich in meiner Antwort gesagt habe, müssen Sie nur den Ordner "Assets" zum Klassenpfad hinzufügen. Mit anderen Worten: Legen Sie den Ordner "Assets" an einer beliebigen Stelle ab, die einzige Voraussetzung ist, dass er im Klassenpfad gefunden wird. –
Arbeiten weg von Marcello Nuccio Antwort zur Verfügung steht, dauerte es noch mir den größten Teil meines Tages es richtig zu machen, so hier ist das, was ich in etwas mehr Detail tat .
Lassen Sie uns sagen, dass ich diese Verzeichnisstruktur haben:
- my-dropwizard-server.jar
- staticdocs
- Vermögenswerte
- image.png
- Vermögenswerte
Dann müssen Sie Folgendes tun, damit es funktioniert:
1) Fügen Sie in Ihrer DropWizard-Anwendungsklasse ein neues AssetsBundle hinzu. Wenn Sie möchten, dass Ihre Assets von einer anderen URL geliefert werden, ändern Sie den zweiten Parameter.
@Override
public void initialize(Bootstrap<AppConfiguration> bootstrap) {
bootstrap.addBundle(new AssetsBundle("/assets/", "/assets/"));
}
2) Fügen Sie den Dokumentstamm zu Ihrem Klassenpfad hinzu, indem Sie das maven-jar-plugin wie folgt konfigurieren. (Gibt es die "./staticdocs/" in die richtige Form hat mich eine Weile. Klassenpfade unversöhnlich sind.)
<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) Dieser Schritt vollständig optional.Wenn Sie Ihren Jersey REST-Ressourcen von einem anderen Wurzelpfad dienen soll (zB „App“), fügen Sie die folgende Konfiguration YML:
server:
rootPath: /app/*
Jetzt können Sie Zugriff auf Ihre statische Inhalte wie dies zum Beispiel:
localhost:8080/assets/image.png
können Sie die Verwendung von 'maven-jar-plugin' umgehen, indem Sie den Ordner' assets' in 'src/main/resources' setzen. –
Aber das wird die Vermögenswerte in das Glas packen, oder? Der springende Punkt dieser Frage ist, die Vermögenswerte von AUSSERHALB des Glases zu bedienen. – craddack
Sie haben Recht. Der wichtigste Punkt ist: Lege deine Assets dorthin, wo du willst, aber stelle sicher, dass sie im Klassenpfad gefunden werden. Dies ist die einzige Voraussetzung. –
Um die Antwort von carddack zu ergänzen: Korrekt, Sie können den regulären AssetsBundle verwenden, solange Sie die Assets zu Ihrem Klassenpfad hinzufügen. Wenn Sie gradle und oneJar verwenden, können Sie ein Verzeichnis auf dem Classpath in der oneJar Aufgabe hinzufügen:
task oneJar(type: OneJar) {
mainClass = '...'
additionalDir = file('...')
manifest {
attributes 'Class-Path': '.. here goes the directory ..'
}
}
Es ist ein up-to-Datum dropwizard-configurable-assets-bundle
bei offiziellen dropwizard Bündel gehalten. Sie finden es unter github https://github.com/dropwizard-bundles/dropwizard-configurable-assets-bundle. Aktuelle Version unterstützt DropWizard 0.9.2
Dies kann verwendet werden, um statische Dateien aus beliebigen Dateisystempfad dienen.
Ich war auf der Suche nach Updates für Tage! Vielen Dank!! – Olesia
- 1. Bereitstellen von Dropwizard auf Google AppEngine
- 2. Rails, die keine Assets im Entwicklungsmodus bereitstellen
- 3. Sharepoint - Bereitstellen von Daten außerhalb des Intranets
- 4. Bilder von außerhalb des Dokumentenstamms bereitstellen
- 5. Azure Adal mit Dropwizard
- 6. Verwenden von Weld mit Dropwizard
- 7. Dropwizard ScheduledExecutorService
- 8. Dropwizard: Integration von Google Guice
- 9. Kann ich mehrere Konfigurationsdateien in DropWizard haben?
- 10. Dropwizard: BasicAuth
- 11. Kann Dropwizard Metrics in Scalatra integriert werden?
- 12. Auf Sharepoint von außerhalb der WebUI zugreifen
- 13. Ordnerstruktur der Assets
- 14. Wie kann ich 404 HTTP-Status von Dropwizard
- 15. DropWizard Auth Realms
- 16. Capistrano Löschen von Assets
- 17. Dropwizard und SSL
- 18. Der Pfad der Rails-Assets ist in der neuen Phase mit der CDN-Assets-Pipeline falsch
- 19. Wie kann ich Assets in/public bereitstellen, die nicht Teil der Asset-Pipeline mit puma/nginx sind?
- 20. Aggregierende Dropwizard-Timer-Metriken
- 21. Kompilieren von Dropwizard Code ohne migration.xml
- 22. Dropwizard Hot-Bereitstellung
- 23. Ruby On Rails lädt keine Assets aus der App/Assets
- 24. Dropwizard Protokollierung Code
- 25. Dropwizard Validate @FormParam
- 26. Sicherheit von Android Assets Ordner
- 27. Override DropWizard ConstraintViolation Nachricht
- 28. Dropwizard: Neue Admin-Ressource
- 29. Bereitstellen auf der Azure-Website von Appveyor
- 30. Verringerung Granularität von dropwizard Timed Jersey Endpunkte
Sie benötigen kein Plugin. Einfach [fügen Sie den Dokumentstamm im Klassenpfad hinzu] (http://stackoverflow.com/a/22221194/453605). –
Leider ist dieses Plug-In veraltet und unterstützt nur bis zu 0,7. Es kann nur eine Frage des Wechselns zum Plugin sein, um den neueren Dropwizard (io.dropwizard) Klassenpfad zu verwenden, aber ich habe es nicht versucht. Irgendwelche andere Antwort? – Joel
Ja, folgen Sie den Schritten in meiner Antwort unten. – craddack