2008-10-03 31 views
9

cách tốt nhất để hiển thị/sử dụng số sửa đổi trong một webapp java là gì?lấy bản sửa đổi svn hiện tại trong webapp

chúng tôi chỉ sử dụng kiến ​​để xây dựng kho lưu trữ .war, không có trình xây dựng hoặc máy chủ như vậy. tôi hy vọng có một số loại nếu $ ref mà tôi có thể viết trong một tập tin tài nguyên, nhưng điều này chỉ được cập nhật khi các tập tin trong câu hỏi được cam kết. tôi cần nó trên toàn cầu.

bạn sẽ đề xuất điều gì? trình kích hoạt sau cam kết cập nhật một số tệp nhất định? tập lệnh kiến ​​tùy chỉnh? có cách nào không hacky hơn để làm điều này? hoặc nó tốt hơn để có số phiên bản của riêng tôi độc lập với svn.

chỉnh sửa: các đề xuất tuyệt vời! cảm ơn rất nhiều vì câu trả lời!

Trả lời

3

Có một số tác vụ Ant có thể thực hiện việc này cho bạn.

SvnAnt task từ tigris là tệp cũ nhất.

Tài liệu là here - đặc biệt hãy xem phần tử info để lộ số phiên bản của kho lưu trữ Subversion dưới dạng thuộc tính Ant mà nó gọi là rev. Bạn có thể viết giá trị này cho tệp resouces của bạn bằng cách sử dụng các cơ chế thay thế Ant bình thường.

Ai đó cũng đã đặt một số simillar (simpler) task trên lưu trữ mã google - không bao giờ sử dụng nó mặc dù vậy không thể nhận xét.

Một trong hai cách này có vẻ là cách gọn gàng nhất đối với tôi nếu bạn đã có Ant trong bản dựng của mình.

1

Xem this thread.

Yêu thích của tôi từ chuỗi đó chỉ là bán phá giá $Id:$ trong mã của bạn nơi bạn muốn ID sửa đổi. SVN sẽ cư trú với dữ liệu thực khi bạn thực hiện xuất.

1

Nếu bạn đang sử dụng cửa sổ, bạn có thể xem SubWCRev.exe đi kèm với rùa.

Nó cung cấp cho bản sửa đổi kho lưu trữ hiện tại và sẽ thay thế $ WCREV $ với đã nói, bạn có thể bao gồm điều này trong web.xml của bạn như nói một tham số ngữ cảnh và sau đó nhận được nó từ đó.

0

Trước khi webapp được đóng gói, hãy chạy thông tin svn và chuyển hướng đầu ra tới một số tệp trong WEB-INF/classes. Khi webapp khởi động, phân tích cú pháp tệp này và xóa nó đi trong ngữ cảnh servlet hoặc một số nơi tương tự. Ở cuối mỗi trang, hiển thị phiên bản này - nếu bạn đang sử dụng một cái gì đó như Gạch hoặc SiteMesh, thay đổi này chỉ cần được thực hiện trong một tệp.

Người dùng Maven có thể thử plugin maven-buildnumber.

6

Chúng tôi sử dụng lệnh ant sau để bao gồm phiên bản svn trong một thuộc tính trong jar, cùng với các phiên bản của gói khác đang được sử dụng

<target name="package" depends="compile" description="Package up the project as a jar"> 
<!-- Create the subversion version string --> 
<exec executable="svnversion" failifexecutionfails="no" outputproperty="version"> 
    <arg value="."/> 
    <arg value="-n"/> 
</exec> 
<!-- Create the time stamp --> 
<tstamp> 
    <format property="timeAndDate" pattern="HH:mm d-MMMM-yyyy"/> 
</tstamp> 

<jar destfile="simfraserv.jar"> 
    <manifest> 
    <attribute name="Built-By"    value="${user.name} on ${time.date}" /> 
    <attribute name="Implementation-Version" value="${svn.version}" /> 
    <attribute name="Implementation-Java"  value="${java.vendor} ${java.version}" /> 
    <attribute name="Implementation-Build-OS" value="${os.name} ${os.arch} ${os.version}" /> 
    <attribute name="JVM-Version"    value="${common.sourcelevel}+" />   
    </manifest> 
    <fileset dir="bin"> 
    <include name="**/*.class"/> 
    </fileset> 
    <fileset dir="src"> 
    <include name="**"/> 
    </fileset> 
</jar> 
</target> 

Và sau đó bạn có thể truy cập nó trong webapp của bạn như này

String version = this.getClass().getPackage().getImplementationVersion(); 
4

Nếu bạn đang sử dụng kiến ​​bạn có thể xác định nhiệm vụ này:

<target name="version"> 
<exec executable="svn" output="svninfo.xml" failonerror="true"> 
    <arg line="info --xml" /> 
</exec> 
<xmlproperty file="svninfo.xml" collapseattributes="true" /> 
<echo message="SVN Revision: ${info.entry.commit.revision}"/> 
<property name="revision" value="${info.entry.commit.revision}" /> 
</target> 

và bạn giá trị sửa đổi mà bạn muốn.

+0

I Ưu tiên giải pháp này vì nó đơn giản và không nằm trong hộp. – amotzg

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