2013-08-21 28 views
6

Tôi cần chuyển nhiều thuộc tính hệ thống cho Tomcat 6 thông qua biến môi trường JAVA_OPTS. Tôi dường như không thể vượt qua thuộc tính hệ thống có chứa không gian:Việc chuyển các thuộc tính hệ thống có chứa khoảng trắng tới Tomcat qua JAVA_OPTS

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS="-DsysProp1=foo -DsysProp2=bar with spaces" ./catalina.sh run 

Không với:

Using CATALINA_BASE: /root/apache-tomcat-6.0.37 
Using CATALINA_HOME: /root/apache-tomcat-6.0.37 
Using CATALINA_TMPDIR: /root/apache-tomcat-6.0.37/temp 
Using JRE_HOME:  /root/jre1.6.0_34/ 
Using CLASSPATH:  /root/apache-tomcat-6.0.37/bin/bootstrap.jar 
Exception in thread "main" java.lang.NoClassDefFoundError: with 
Caused by: java.lang.ClassNotFoundException: with 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
Could not find the main class: with. Program will exit. 

Tôi nhìn xung quanh trên SO và câu trả lời dường như không giúp đỡ. Đã thử tất cả những điều này không thành công:

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS="-DsysProp1=foo -DsysProp2=\"bar with spaces\"" ./catalina.sh run 

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS='-DsysProp1=foo -DsysProp2="bar with spaces"' ./catalina.sh run 

JRE_HOME=/root/jre1.6.0_34/ JAVA_OPTS='-DsysProp1=foo -DsysProp2=bar\ with\ spaces' ./catalina.sh run 
+1

Bạn có thể hiển thị tập lệnh cataline.sh không? Có lẽ vấn đề là bên trong kịch bản đó –

+1

catalina.sh là kịch bản khởi động của Tomcat, vì vậy tôi sẽ không muốn sửa đổi nó. Bạn có thể xem tại đây: http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_34/bin/catalina.sh – AlexBrand

+0

Tôi quan tâm đến tất cả các con đường của bạn dưới '/ root' - Tôi hy vọng bạn không chạy Tomcat là người dùng root ... –

Trả lời

3

Là một thay thế bạn có thể đặt các thiết lập tài sản vào conf/catalina.properties thay vì sử dụng JAVA_OPTS. Đây là một tập tin định dạng java.util.Properties tiêu chuẩn, do đó bạn không cần phải trích dẫn bất cứ điều gì, nó chỉ đơn giản mất tất cả mọi thứ trước khi là người đầu tiên dấu bằng, ruột hoặc không gian như tên tài sản và tất cả mọi thứ sau đó là giá trị:

sysProp2=bar with spaces 

Nếu bạn không thể (hoặc không muốn) sửa đổi tập tin trực tiếp, bạn có thể sao chép nó vào một vị trí khác, chỉnh sửa sao chép, và sau đó vượt qua

-Dcatalina.config=file:/path/to/copy/of/catalina.properties 

trong JAVA_OPTS để làm cho nó load tài sản của bạn từ đó.

+0

bạn có thể đưa ra một ví dụ về chính xác những gì cần viết trong 'catalina.properties'? –

+0

@ElliottB Tôi đã thêm một số chi tiết hơn - đó là tệp thuộc tính chuẩn nên không yêu cầu trích dẫn. –

+0

Tôi đã thử dòng sau trong catalina.properties nhưng nó không có hiệu lực. Tôi đã thử thêm rác vào dòng là tốt, và nó dường như bị bỏ qua bởi Tomcat. '-Djavax.sound.sampled.SourceDataLine = # Nvidia [plughw: 0,0]' –

0

Được rồi. Cảm ơn bạn đã cung cấp liên kết đến tập lệnh thực tế. Đây là những gì catalina.sh làm:

exec "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS # ... more stuff 

Vì vậy, nó sẽ được tách bằng dấu cách không có vấn đề gì bạn làm. Không có cách nào để khắc phục điều đó mà không thay đổi tệp catalina.sh.

Trang này trả lời câu hỏi một cách chi tiết: http://mywiki.wooledge.org/BashFAQ/050

+0

Bạn có thể giải thích lý do tại sao nó sẽ bị phân chia bởi không gian không có vấn đề gì? – AlexBrand

+0

Vì đó là cách tách từ hoạt động trong bash. Có một lý do tại sao tôi thêm một liên kết để bash faq. Có một số giải pháp được cung cấp là tốt. –

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