2015-12-08 29 views
9

Trong Spring Boot's docs here, về phục vụ nội dung tĩnh, nó nói:Xuân Boot classpath

Theo mặc định mùa xuân Boot sẽ phục vụ nội dung tĩnh từ một thư mục gọi/tĩnh (hoặc// nguồn lực công cộng hoặc hoặc/meta- INF/resources) trong số classpath.

tôi thấy rằng tất cả các nội dung trong thư mục:

src/main/resources 

sẽ được sao chép bên trong classpath, vì vậy tôi có thể đặt nội dung tĩnh của tôi trong:

src/main/resources/static 

và tất cả sẽ hoạt động tốt và tôi vui vì tôi có thể có nội dung tĩnh của mình trong thư mục src.

Nhưng, tôi có một số câu hỏi về vấn đề này:

  1. sao các tài liệu không nói để đưa nội dung tĩnh trong src/main/resources/static thay vì nói về classpath (Tôi nghĩ rằng đây là một chút khó hiểu)?
  2. Giả sử rằng nội dung trong src/main/resources/ sẽ luôn được sao chép trong đường dẫn lớp không?
  3. Có một số tài liệu chính thức của Spring Boot giải thích những gì tôi phải tìm thấy trong classpath ngoài các lớp và gói Java (cho đến bây giờ tôi chỉ biết mình có thể tìm thấy tất cả nội dung từ src/main/resources/)?

Trả lời

7

/src/main/resources là quy ước về cấu trúc dự án Maven. Đó là một con đường bên trong dự án của bạn nơi bạn đặt tài nguyên. Trong bước xây dựng, Maven sẽ lấy các tệp trong đó và đặt chúng vào vị trí thích hợp để bạn sử dụng chúng trong đường dẫn lớp thời gian chạy, ví dụ: .jar, một số vị trí hệ thống tệp vật lý được sử dụng trong classpath (với tùy chọn -cp của java), v.v.

Tôi có thể chọn tự xây dựng ứng dụng của mình hoặc với công cụ xây dựng khác. Trong trường hợp này, /src/main/resources sẽ không tồn tại. Tuy nhiên, ý định là cho classpath là giống nhau, tức là. chứa các tài nguyên giống nhau và các tệp .class.

Tài liệu khởi động Spring nói về classpath vì nó không nên đưa ra giả định về cách thiết lập dự án của bạn.

+0

Cảm ơn, đây là điều tôi muốn hiểu. – Andrea

+0

Thật buồn khi biết rằng thư mục '/ src/main/resources' không liên quan chặt chẽ với Spring Boot, vì bây giờ tôi phải nhớ rằng nếu tôi khởi động dự án Spring Boot với công cụ xây dựng khác thay vì Maven (có lẽ Gradle?) dự án không thể hoạt động nếu tôi đặt nội dung tĩnh trong '/ src/main/resources' ..:/ – Andrea

+0

@Andrea Đó là một quy ước được áp dụng rộng rãi. [Gradle cũng hỗ trợ nó.] (Https://docs.gradle.org/current/userguide/java_plugin.html) –

3

Đường dẫn lớp cũng chứa các thư viện bổ sung (JAR), thư mục này cũng có thể có thư mục static, sau đó sẽ được bao gồm để phân phát tài nguyên tĩnh. Vì vậy, nếu tài liệu sẽ chỉ nêu rõ thư mục src/main/resources/static, nó sẽ không đầy đủ.

Quảng cáo 2: Miễn là bạn không gây rối với cấu hình Maven mặc định, thì sẽ an toàn khi giả định điều này.

Quảng cáo 3: Có thể bắt đầu bằng tài liệu chính thức của Oracle: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/classpath.html. Gợi ý: Tất nhiên, nó không chỉ là nội dung của thư mục tài nguyên, mà là trong classpath, nhưng cũng tất nhiên tất cả các lớp biên dịch, do đó tên của nó.

+0

Cảm ơn câu trả lời.Trong điểm thứ 3 của tôi, tôi có nghĩa là "tài liệu chính thức ** của Spring Boot **": một số tài liệu được giải thích rằng trong một ứng dụng Spring Boot, nội dung từ 'src/main/resources' được sao chép trong classpath hoặc một cái gì đó tương tự. Thx – Andrea

+0

Điều đó không liên quan gì đến Spring Boot, vì vậy bạn sẽ không tìm thấy bất cứ điều gì về điều đó trong tài liệu Spring Boot. Nó là mặc định Maven (hoặc Gradle, nếu bạn sử dụng chức năng đó), và nó có sẵn trong mọi dự án Maven/Gradle, không chỉ các ứng dụng Spring Boot. – dunni

+0

Cảm ơn, tôi không biết rằng '/ src/main/resources' là một quy ước của công cụ xây dựng, tôi nghĩ là Spring Boot có liên quan nhiều hơn. – Andrea

Các vấn đề liên quan