Tôi có một tệp XML (urlrewrite.xml) cần một trình giữ chỗ thuộc tính được giải quyết. Tôi cho phép lọc Maven để đạt được điều này. Điều này làm việc tốt cho tập tin WAR lắp ráp.Làm cách nào để lọc tài nguyên khi sử dụng plugin maven jetty?
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
Sự cố là khi cố chạy ứng dụng ở chế độ phát triển bằng trình cắm maven-jetty (Plugin Maven Jetty), làm cầu nối maven: chạy.
Tệp được đề cập, urlrewrite.xml, nằm trong thư mục src/main/resources và do đó nên (và không) kết thúc trong/WEB-INF/classes (hoặc target/classes cho maven jetty: run).
Các URLRewriteFilter cấu hình xác định vị trí của tập tin cấu hình như sau:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/classes/urlrewrite.xml</param-value>
</init-param>
</filter>
này sẽ làm việc vào thời điểm triển khai. Tuy nhiên, bằng cách sử dụng plugin maven jetty, URLRewrite sẽ chết với NullPointerException vì nó sử dụng context.getResourceAsString ("/ WEB-INF/classes/urlrewrite.xml") để tải tệp cấu hình. Jetty trả về null cho điều này vì khi chạy ứng dụng từ không gian làm việc, nó giải quyết/WEB-INF/classes/... thành src/main/webapp/WEB-INF/.... Tệp không tồn tại ở đó vì WAR chưa được lắp ráp. Thay vào đó, nó sẽ lấy tài nguyên từ target/classes/urlrewrite.xml.
Nếu điều đó không rõ ràng với bạn, thì có thể bạn sẽ không thể trả lời câu hỏi này vì tôi nghi ngờ bạn sẽ cần phải là một chuyên gia Jetty để tìm ra cách giải quyết (gợi ý: đó là một thách thức!).
Có ai biết cách này không? Tôi cũng đã thử các cách giải quyết sau đây để biết avail:
- Đặt urlrewrite.xml dưới một thư mục mới, src/main/webResources và thêm nó vào các plugin chiến tranh maven <webReources> và cho phép lọc. Điều đó sẽ sao chép nội dung của nó ở vị trí thích hợp khi WAR được đóng gói, nhưng sẽ không làm cho nó có sẵn cho cầu tàu: chạy
- Một số hacks khác mà tôi thậm chí không thể nhớ ... (sẽ cập nhật nếu tôi làm)
Nói tóm lại, maven-cầu cảng-plugin cần tập tin phải được theo src/main/nguồn/webapp/đường chèn và filename để có sẵn cho các cầu cảng maven: lệnh chạy ...
Cảm ơn sự giúp đỡ của bạn ...
Trân trọng, Lloyd F orce
+1 Đối với giải pháp ghi tài liệu (có quá nhiều câu hỏi chưa được trả lời trên mạng). Nếu điều này phù hợp với bạn, hãy tự chấp nhận. Chỉ cần một sang một bên, có bạn đã cố gắng để thêm 'phát triển' hồ sơ maven với lọc tài nguyên chuyên ngành? Đó là một cách tiếp cận tôi đã thực hiện cho dự án web không phải của tôi. –
Tùy chọn sử dụng trình bổ sung maven-replacer và để nó ghi tập tin được thay thế vào/WEB-INF/classes/dir. Nó sẽ đảm bảo cấu trúc dir tồn tại. – Steven
Đối với những người sử dụng Jetty 9: org.eclipse.jetty.util.resource.ResourceCollection thay vì org.mortbay.resource.ResourceCollection – RockMeetHardplace