2011-09-16 39 views
16

Tôi đang tìm cách tìm kiếm tên máy chủ và đặt nó làm tài sản trong Maven.Tra cứu tên máy chủ từ Maven

này không hoạt động trong tất cả các môi trường:

... 
<properties> 
    <hostname>${env.HOSTNAME}</hostname> 
</properties> 
... 

Bất kỳ lời đề nghị?

+0

Bạn có cần điều đó trong một bản dựng thực hoặc chỉ trong môi trường CI không? – khmarbaise

+0

Tôi muốn lọc các tệp thuộc tính thử nghiệm thay thế $ {hostname} bằng tên máy chủ nơi nó chạy. Điều này rất hữu ích cho các bản dựng cục bộ và cho môi trường CI. Đối với "thực", xây dựng tên máy chủ trong tệp thuộc tính được mã hóa cứng. Điều này là để đảm bảo tệp thuộc tính dành cho môi trường chính xác. – steinim

+0

Tại sao không tạo các tạo tác cho mọi môi trường bạn cần thay vì tạo môi trường xây dựng phụ thuộc? Điều gì về điều này: http://blog.soebes.de/index.php?/archives/340-Maven-Configuration-For-Multipe-Environments.html – khmarbaise

Trả lời

25

Sử dụng một kịch bản hấp dẫn để thiết lập thuộc tính dự án

<plugin> 
     <groupId>org.codehaus.groovy.maven</groupId> 
     <artifactId>gmaven-plugin</artifactId> 
     <executions> 
      <execution> 
       <phase>generate-resources</phase> 
       <goals> 
        <goal>execute</goal> 
       </goals> 
       <configuration> 
        <source> 
        project.properties["hostname"] = InetAddress.getLocalHost().getHostName() 
       </source> 
      </configuration> 
     </execution> 
     </executions> 
</plugin> 
+0

Giải pháp tuyệt vời! Cảm ơn :) – steinim

+2

Khó tin Maven không thể phơi bày thông tin này theo bất kỳ cách nào khác. Mặc dù vậy, hack đẹp. Bạn có biết các thuộc tính khác thường được đặt trong thời trang này không? – cwash

+1

@cwash Hack? đã đồng ý. Nó là cần thiết cho các mục thông tin không có sẵn cho Maven như là một thuộc tính hệ thống hoặc môi trường. Xem: http://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html –

4

$ {} env.COMPUTERNAME làm việc cho tôi ..

+0

Mặc dù tôi đoán đây là cửa sổ cụ thể – rudolfson

2

tôi đã kết thúc với một giải pháp đơn giản cho vấn đề cross-plattform:

<manifestEntries> 
    <Build-Host-Linux>${env.HOSTNAME}</Build-Host-Linux> 
    <Build-Host-Windows>${env.COMPUTERNAME}</Build-Host-Windows> 
</manifestEntries> 
+8

nix unix $ {env.HOSTNAME} cửa sổ của Windows $ {} env.COMPUTERNAME $ {} env.HOSTNAME user1885834

+0

Âm thanh tốt. Nhưng HOSTNAME không được xác định trên RHEL7 cho tôi. – Christian

+0

Thật kỳ lạ. RHEL6 là OK với điều này. Bạn có chắc là bạn đã có env.HOSTNAME và không chỉ HOSTNAME? – AxelW

0

Nhận xét được đăng bởi user1885834 phù hợp nhất với tôi: Tạo tiểu sử cho Windows và Linux và sử dụng các biến môi trường tương ứng để xác định thuộc tính mới $ {hostname}, là u sed bất cứ nơi nào.

<profile> 
    <id>unix</id> 
    <activation> 
     <os> 
     <family>unix</family> 
     </os> 
    </activation> 
    <properties> 
     <hostname>${env.HOSTNAME}</hostname> 
    </properties> 
</profile> 
<profile> 
    <id>windows</id> 
    <activation> 
     <os> 
     <family>Windows</family> 
     </os> 
    </activation> 
    <properties> 
     <hostname>${env.COMPUTERNAME}</hostname> 
    </properties> 
</profile> 
+0

chỉ rằng HOSTNAME không được định nghĩa trên RedHat: ( – Christian

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