Đến từ một nền ASP.NET, tôi thấy nó gây sốc bao nhiêu công việc cần thiết để có được một webapp chạy với Eclipse WTP và Maven đặc biệt là nếu bạn đang học một mình. Hy vọng rằng hướng dẫn bắt đầu nhanh này sẽ giúp người khác bắt kịp tốc độ nhanh chóng.
Có hai cách để có dự án hello world làm việc trong WTP Eclipse với Maven. Bạn có thể tạo một dự án web động và sau đó thêm tính chất Maven hoặc bạn có thể làm ngược lại.
Pre-kiện tiên quyết cho Eclipse với các trang web cập nhật
Startup cấu hình
Lựa chọn 1: Tạo Dynamic Web Project sau đó thêm Maven Nature
Tạo dự án Maven mới, chọn nguyên mẫu org.apache.maven.archetypes : maven-archetype-webapp
Thay đổi thành phối cảnh Java EE.
Tạo thư mục nguồn mới, src \ main \ java. Lưu ý rằng Eclipse không đủ thông minh để làm điều này cho bạn và thứ tự của các thư mục không chính xác. Thư mục src \ main \ java được liệt kê sau src \ main \ resources. Điều này có thể được khắc phục thủ công sau này trong thuộc tính dự án.
Tạo một servlet mới. Lưu ý cách Eclipse mặc định tệp này trong thư mục sai src \ main \ resources vì thứ tự sai. Thay vào đó, hãy chọn thủ công src \ main \ java. Thay đổi ánh xạ URL trên trang thứ hai của trình hướng dẫn thành/* để giúp thử nghiệm dễ dàng hơn.
Bây giờ servlet của chúng tôi đã sẵn sàng nhưng phụ thuộc vào api servlet không bị ràng buộc. A) chúng ta có thể thêm api servlet như là một sự phụ thuộc vào dự án của chúng ta hoặc B) chúng ta có thể ràng buộc với cấu hình máy chủ Eclipse cho Apache 7.0.
Đối với tùy chọn A, thêm sự phụ thuộc này để pom:
.
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-api</artifactId>
<version>7.0.${set this}</version>
<scope>provided</scope>
</dependency>
thử nghiệm phụ thuộc xuất bản:
.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("The time is now: " + new DateTime().toString());
}
Nạp lại trang kiểm tra và bây giờ sản lượng nên là:
Hiện tại là: 2012-03-03T14: 14: 29,890-05: 00
Bây giờ nếu bạn muốn chơi với Servlet 3.0 và chú thích này không được kích hoạt theo mặc định, vì lý do gì tôi không biết. Lực lượng đầu tiên Maven sử dụng Java 1.6 bằng cách thêm vào pom của bạn, nếu không mỗi lần bạn cập nhật pom của bạn, cấu hình sẽ hoàn nguyên về Java 1.5.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
Mở thuộc tính dự án -> Project Facets. Thay đổi Phiên bản trong "Mô-đun web động" thành 3.0, thay đổi phiên bản java 1.6
Tạo một Servlet mới với tên lớp AnnotatedServlet trong src \ main \ java và lưu ý cách chú thích @WebServlet được tạo tự động.
Phương án 2: Tạo Dynamic Web Project sau đó thêm Maven Nature
- Chọn Tomcat Runtime và Dynamic Mô-đun Phiên bản 3.0
- Tạo thư mục nguồn src \ chính \ java
- mục tiêu sản lượng Set default \ lớp học
- Đặt thư mục ngữ cảnh src \ main \ webapp
- Kiểm tra tạo web.xml
- Tạo servlet với bản đồ/* để thử nghiệm nhanh chóng
- Thêm một tuyên bố sản lượng cho phương thức doGet
response.getWriter().println("Another test");
.
<dependencies>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
Cảm ơn mẹo, cấu hình này được định cấu hình chính xác nhưng không hoạt động. Cuối cùng tôi phát hiện ra rằng việc tạo ra một dự án mới từ đầu làm việc. Trong trường hợp này, tôi đã tạo dự án và sau đó thêm trình kết nối WTP Maven và nó không cấu hình đúng dự án. – dcompiled
Tôi đã có một chút vấn đề khác, nhưng điều này đã khắc phục nó. Tôi đã sử dụng Maven để xây dựng dự án của tôi có SNAPSHOTS trong đó. Ban đầu tôi đã bật Độ phân giải không gian làm việc và tắt tính năng này. Eclipse đã được cấu hình để vẫn sử dụng dự án cục bộ chứ không phải các ảnh chụp nhanh từ repo nexus của chúng ta. Tôi tiếp tục nhận được CNFEs và tìm thấy điều này mà chỉ cho tôi vấn đề của nó vẫn cố gắng giải quyết nó và không xuất bản nó. – bh5k
điều này đã giúp tôi rất nhiều và trong trường hợp khác :) (tương tự) – Alex