2012-03-02 43 views
14

Chúng tôi có một thuộc tính chứa một loạt đối số được chuyển đến JVM trong tập lệnh Ant.Ant, jvmarg, thuộc tính hệ thống và báo giá

Ví dụ (chú ý dấu ngoặc kép trong entry thứ hai):

-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password 

Nếu tôi in các nội dung của biến với echo mục tiêu tôi nhận được kết quả mong đợi

<echo message="${jvm.arguments}"/> 

sản xuất

-Dsql.driver=oracle.jdbc.driver.OracleDriver -Dapp.datasource-properties=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password 

Sau đó, tôi sử dụng biến làm đối số cho JVM.

Ví dụ:

<junit fork="true" forkmode="once" showoutput="true" printsummary="on"> 
    <jvmarg 
     line="-XX:MaxPermSize=256m -Xms1024M ${jvm.arguments}" 

Các dấu ngoặc kép đang âm thầm gỡ bỏ. Sản lượng tiết của Ant cung cấp cho tôi

[junit] Executing '/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java' with arguments: 
[junit] '-XX:MaxPermSize=256m' 
[junit] '-Xms1024M' 
[junit] '-Dsql.driver=oracle.jdbc.driver.OracleDriver' 
[junit] '-Dapp.datasource-properties=URL=jdbc:oracle:thin:@//192.168.56.42:1521/xe:User=user=password' 

Làm cách nào để chuyển thuộc tính hệ thống cho JVM có dấu ngoặc kép? (đơn hoặc đôi)?

Tôi đã cố gắng thoát chúng, sử dụng dấu ngoặc kép không có hiệu lực.

Trả lời

14

tôi sử dụng <jvmarg> với giá trị duy nhất

<jvmarg value="-ea"/> 
<jvmarg value="-Dapp.URL=URL=${jvmargs}"/> 

Rồi này được gọi với dòng sau ...

ant tests -Djvmargs=\'jdbc:oracle:thin:@//192.168.56.42:1521/xe\':User=user:Password=password -debug 

Sản lượng với -debug đã dòng mong đợi của bạn.

[junit] '-ea' 
[junit] '-Dapp.URL=URL='jdbc:oracle:thin:@//192.168.56.42:1521/xe':User=user:Password=password' 

line có nghĩa là xử lý đối số được phân tách bằng dấu cách. Nó có thể làm phân tích cú pháp bổ sung và xử lý để xử lý đầu vào với khoảng trắng. Tôi chưa kiểm tra mã.

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