2010-03-16 25 views
6

Tôi có một mục tiêu kiến ​​mà echo nội dung của một tập tin eclipse .project, ý tưởng ở đây là để đảm bảo rằng dự án có thể dễ dàng nhập vào nhật thực. Tên dự án phải khớp với thư mục trong đó thanh toán của nó. Tôi có điều này cho đến nayant basedir và eclipse .project tập tin thế hệ

<target name="eclipse" description="creates an eclipse .project file"> 
    <echo file=".project"> 
     <![CDATA[<?xml version="1.0" encoding="UTF-8"?> 
     <projectDescription> 
      <name>${basedir}</name> 
      <comment></comment> 
      <projects> 
      </projects> 
      <buildSpec> 
       <buildCommand> 
        <name>org.eclipse.jdt.core.javabuilder</name> 
        <arguments> 
        </arguments> 
       </buildCommand> 
      </buildSpec> 
      <natures> 
       <nature>org.eclipse.jdt.core.javanature</nature> 
      </natures> 
     </projectDescription> 
     ]]> 
    </echo>  
</target> 

Vấn đề là $ {basedir} để đánh giá một đường dẫn đầy đủ

<name>/home/assure/projects/MyProject</name> 

nhưng Eclipse chỉ cần tên thư mục thức

<name>MyProject</name> 

Bất kỳ ý tưởng về ant mục tiêu tôi nên sử dụng để loại bỏ con đường này?

Trả lời

3

Bạn có thể xác định thuộc tính trước tiên, dựa trên thư mục cuối cùng của đường dẫn "tên cơ sở".
(xem Ant basename Task)

<basename property="project.name" file="${basedir}"/> 

đó cho phép bạn sử dụng lại tài sản đó trong phần còn lại của kịch bản của bạn

<projectDescription> 
    <name>${project.name}</name> 
4

tôi đã tìm thấy một workaround bằng cách sử dụng kiến ​​'flattenmapper' để cắt giá trị basedir

<path id="basedir.path"> 
     <pathelement path="${basedir}" /> 
    </path> 
    <pathconvert property="project.name" refid="basedir.path"> 
     <chainedmapper> 
      <mapper type="flatten"/> 
      <flattenmapper/> 
     </chainedmapper> 
    </pathconvert> 
    <echo message="${project.name}" /> 

nhưng 1 dòng luôn đánh bại 10 dòng, ;-)

+0

Âm thanh phức tạp, nhưng phản hồi tốt đẹp. +1 – VonC

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