2013-12-12 14 views
7

Mục tiêu của tôi là bắt đầu tomcat bằng Ant. Đây là kịch bản của tôi: java.lang.NoClassDefFoundError khi khởi động tomcat 7 từ Ant

<target name="tomcat-start"> 
    <java jar="${tomcat.home}/bin/bootstrap.jar" fork="true" dir="${tomcat.home}"> 
     <classpath> 
      <fileset dir="${tomcat.home}/bin"> 
       <include name="bootstrap.jar"/> 
       <include name="tomcat-juli.jar"/> 
      </fileset> 
     </classpath> 

     <jvmarg value="-Dcatalina.home=${tomcat.home}"/> 

    </java> 
</target> 

Sau khi thực hiện kịch bản tôi nhận được kết quả này:

java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory 
at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:60) 
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory 
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
... 1 more 
Exception in thread "main" 
Java Result: 1 

Tôi đã kiểm tra: org.apache.juli.logging.LogFactory lớp được trình bày trong tomcat-juli.jar!

Điều gì có thể sai?

+0

Bạn có chắc chắn rằng mục nhập classpath đang trỏ đúng vị trí không? Bạn có jar được liệt kê, nhưng bạn đã không hiển thị nơi bạn đang lưu trữ nó, và Ant có thể không được tìm kiếm trong thư mục bên phải cho nó. – chrylis

+0

@chrylis, tôi đã kiểm tra đường dẫn tệp bằng cách sử dụng '' và cũng đã thử các cách tiếp cận khác nhau của việc đặt đường dẫn lớp trong nhiệm vụ kiến ​​''. Không có gì giúp được. – ivstas

Trả lời

6

Vì một số lý do lạ không rõ, tomcat không khởi động trong hệ thống của tôi ngay cả khi tôi khởi chạy nó từ dòng lệnh sử dụng lệnh java -jar.

Tuy nhiên, tôi được quản lý để bắt đầu bằng cách sử dụng lệnh java -cp "bin\bootstrap.jar;bin\tomcat-juli.jar" org.apache.catalina.startup.Bootstrap, được thực hiện từ thư mục tomcat.home.

Các mã trong kiến ​​mà không giống nhau:

<exec executable="java" dir="${tomcat.home}"> 
    <arg line="-cp bin\bootstrap.jar;bin\tomcat-juli.jar"/> 
    <arg value="org.apache.catalina.startup.Bootstrap"/> 
</exec> 
+0

Tôi đã có SAME chính xác vấn đề, cảm ơn lòng tốt cho phản ứng của bạn. Tôi đã dành nhiều giờ thử những thứ khác nhau được tìm thấy bởi google-ing. Giải pháp của bạn hoạt động hoàn hảo. Tôi đã bọc ' 'vào một' '. –

1

Kiểm tra tệp hàng loạt startup.sh hoặc tập lệnh shell của tomcat. Nó có nhiều tệp khác ngoài bootstrap.jar. kiểm tra setclasspath.sh. Nó có tất cả các lọ được đặt trong đường dẫn lớp.

Khác làm sạch hơn cách tiếp cận sẽ là gọi startup.sh tập lệnh từ ant. Điều này sẽ làm mọi thứ cho những gì nó cần để khởi động Tomcat Server.

+0

Tôi đang sử dụng tomcat 7 trên cửa sổ và nó chỉ chứa 'bootstrap.jar',' tomcat-juli.jar', 'Tomcat7.exe' và' Tomcat7w.exe' trong thư mục 'bin' – ivstas

3

Nếu bạn muốn gắn bó với việc sử dụng catalina, phương pháp thích hợp là thêm \ setenv.bat với nội dung như sau:

set CLASSPATH=D:\tomcat\apache-tomcat-7.0.42\bin\bootstrap.jar;D:\tomcat\apache-tomcat-7.0.42\bin\tomcat-juli.jar 

Tôi phát hiện ra rằng bằng cách đọc catalina.bat. Ai đó có thể muốn cập nhật thông tin này bằng tài liệu Tomcat thích hợp

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