2008-10-05 31 views
8

Khi nhận được báo cáo lỗi hoặc tin nhắn không hoạt động, một trong những câu hỏi đầu tiên của tôi luôn là phiên bản nào? Với các bản dựng khác nhau ở nhiều giai đoạn thử nghiệm, lập kế hoạch và triển khai điều này thường là một câu hỏi không tầm thường.Cách tốt nhất để lưu trữ thông tin phiên bản Subversion trong EAR?

Tôi là trường hợp phát hành tệp Java JAR (tai, jar, rar, chiến tranh) mà tôi muốn có thể xem/tại JAR và chuyển sang cùng một chi nhánh, phiên bản hoặc thẻ là nguồn của phát hành JAR.

Làm cách nào để tôi có thể điều chỉnh tốt nhất quá trình tạo kiến ​​để thông tin phiên bản trong thanh toán svn vẫn còn trong bản dựng được tạo?

Tôi đã suy nghĩ dọc theo dòng:

  • thêm một tập tin VERSION, nhưng với nội dung gì?
  • lưu trữ thông tin trong tệp META-INF, nhưng dưới thuộc tính nào có nội dung nào?
  • nguồn sao chép vào các kho lưu trữ kết quả
  • thêm svn: tính đến tất cả các nguồn với từ khóa ở những nơi trình biên dịch lá họ được

tôi đã kết thúc sử dụng phương pháp svnversion (các anwser được chấp nhận), bởi vì nó quét toàn bộ cây con như trái ngược với thông tin svn mà chỉ cần nhìn vào tập tin/thư mục hiện tại. Đối với điều này tôi xác định nhiệm vụ SVN trong tập tin kiến ​​để làm cho nó di động hơn.

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask"> 
    <classpath> 
    <pathelement location="${dir.lib}/ant/svnant.jar"/> 
    <pathelement location="${dir.lib}/ant/svnClientAdapter.jar"/> 
    <pathelement location="${dir.lib}/ant/svnkit.jar"/> 
    <pathelement location="${dir.lib}/ant/svnjavahl.jar"/> 
    </classpath>   
</taskdef> 

Không phải tất cả được xây dựng dẫn đến webservices. Tệp tai trước khi triển khai phải duy trì cùng tên vì cập nhật trong máy chủ ứng dụng. Làm cho tệp thực thi vẫn là một tùy chọn, nhưng cho đến lúc đó tôi chỉ bao gồm một tệp thông tin phiên bản.

<target name="version"> 
    <svn><wcVersion path="${dir.source}"/></svn> 
    <echo file="${dir.build}/VERSION">${revision.range}</echo> 
</target> 

Refs:
svnrevision: http://svnbook.red-bean.com/en/1.1/re57.html
svn info nhiệm vụ svn http://svnbook.red-bean.com/en/1.1/re13.html
subclipse: http://subclipse.tigris.org/svnant/svn.html
svn client: http://svnkit.com/

+0

Tôi SvnTask di động hơn là chạy "svnversion" như trong câu trả lời được chấp nhận? –

Trả lời

5

Sử dụng lệnh svnversion trong kịch bản Ant của bạn để có được những revision number:

<exec executable="svnversion" outputproperty="svnversion" failonerror="true"> 
    <env key="path" value="/usr/bin"/> 
    <arg value="--no-newline" /> 
</exec> 

Sau đó sử dụng $ {} svnversion bất động sản ở đâu đó trong EAR của bạn. Chúng tôi đặt nó trong tên tập tin EAR, nhưng bạn cũng có thể đặt nó trong một readme hoặc phiên bản tập tin bên trong EAR, hoặc chỉ định các phiên bản trong của EAR META-INF/MANIFEST.MF:

<!-- myapp-r1234.ear --> 
<property name="ear" value="myapp-r${svnrevision}.ear" /> 
1

Từ đỉnh tâm trí của tôi. Một thẻ cho mỗi xây dựng jar?

1

Chúng tôi có phần đầu tiên của bản dựng của chúng tôi tạo tệp version.txt trong thư mục gốc của gói và kết xuất thẻ được sử dụng để kiểm tra mã từ (trong trường hợp của chúng tôi) CVS ... Ngoài ra, phần cuối cùng của quá trình xây dựng của chúng tôi kiểm tra EAR được xây dựng đầy đủ trở lại vào CVS để tham khảo trong tương lai.

Bằng cách đó, nếu chúng tôi gặp sự cố với ứng dụng web - đó chỉ là trường hợp yêu cầu phóng viên nhấn /app/version.txt - từ đó chúng tôi có thể xem chi tiết lịch sử xây dựng cụ thể trong CVS (xử lý các phiên bản khác nhau của thư viện trong ứng dụng) để xác định lỗi.

Không chắc chắn số tiền trợ giúp này dành cho dân gian hỗ trợ của chúng tôi - nhưng đó chắc chắn là điều họ khiếu nại về không phải là đang ở đó!

4

Bạn muốn cung cấp chi nhánh và số kho lưu trữ Subversion.Như được thảo luận trong How to access the current Subversion build number?, lệnh svn info sẽ cung cấp cho bạn thông tin này, sau đó bạn có thể sử dụng để tạo tệp VERSION hoặc đặt trong bất kỳ tệp nào khác mà bạn đang xây dựng vào tệp * AR của mình. Nếu bạn đã không có gì khác trong tâm trí, bạn có thể xem xét sử dụng XmlProperty Ant task để trích xuất các thông tin có liên quan từ đầu ra của bạn svn   thông tin   lệnh --xml

1

Do tự động xây dựng, và đặt một thẻ (với một ngày stamp) trên codebase khi build thành công (với uncest ofcourse).

Trong quá trình phân phối, chỉ phân phối các bản dựng được gắn thẻ cho khách hàng. Bằng cách này, bạn có quyền kiểm soát và có thể đặt tên thẻ trong một tệp readme.txt ở đâu đó hoặc có tên tệp của tệp tai phản ánh tên thẻ.

Cá nhân tôi đã chuyển về CVS và đây là một trong những lý do. Trong CVS, tôi có thể có một báo cáo lớp là thẻ của nó. Tất cả các tệp jar của tôi chứa một "chính" mà làm cho chúng runnable. Với các câu hỏi hỗ trợ, tôi yêu cầu khách hàng thực hiện "java -jar somejar.jar" và gửi kết quả cho tôi cùng với câu hỏi.

Bằng cách này tôi chắc chắn về việc xây dựng chúng đang sử dụng và tôi thậm chí có thể có thông tin như phiên bản java, loại hệ điều hành và phiên bản. Nếu không có khách hàng phải trả lời các câu hỏi lạ.

Đơn giản nhưng rất hiệu quả.

1

Tại sao không đặt số bản dựng vào tệp thuộc tính ... điều này sau đó có thể dễ dàng được đọc bởi java và xuất sang Trợ giúp | Giới thiệu về hộp thoại (applet/application), footer của trang web hoặc bất kỳ GUI nào khác mà bạn có thể có.

(Xem chân trên mỗi trang SOF .... có số phiên bản SVN ở đó.)

Có vẻ một tải dễ dàng hơn tìm trong WAR/EAR/JAR vv thời gian dễ dàng?

0

tôi lưu trữ bản sửa đổi kho lưu trữ tuyệt đối như là một phần của số phiên bản đầy đủ của tôi. Điều này cho phép mọi người xem lướt qua để xem liệu một thay đổi nhất định có nằm trong một phiên bản cụ thể hay không.

Chúng tôi cũng lưu trữ số phiên bản/ngày xây dựng/v.v ... trong tệp kê khai của tai làm thuộc tính tùy chỉnh, hầu hết chỉ là thông tin. Chúng tôi cũng lưu trữ nó trong một tập tin thuộc tính được xây dựng trong lọ của chúng tôi, vì vậy ứng dụng có thể đọc nó.

3

Khám phá dự án jreleaseinfo. Chứa một tác vụ ANT có thể tạo ra một lớp java có thể được gọi trong thời gian chạy để hiển thị thông tin phát hành cho dự án của bạn.

Tôi thích sự đơn giản của nó.

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