2012-09-16 16 views
2

我正在使用我公司的Ant腳本來編譯使用javax.jms API的類。儘管ant腳本顯示它正在加載類(並且我確認jms.jar位於Ant構建使用的類路徑中),但似乎無法找到此API的任何類的方法。我也在使用Eclipse,這個類在Eclipse中編譯得很好(使用與Ant構建腳本的類路徑相同的jms.jar)。我查看了javax.jms API,它看起來像我正確地編碼。下面包含了代碼的exceprt,後面跟着編譯輸出的摘錄。即使加載了所需的javax.jms類,ant build(javac)仍會提供「找不到符號」錯誤

代碼摘錄

import java.util.*; 
import javax.jms.*; 
import javax.naming.*; 
import javax.naming.directory.*; 

Hashtable environment = new Hashtable(); 
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory"); 
environment.put(Context.PROVIDER_URL, "file:C:\\MQ-JNDI"); 
final InitialDirContext ctx = new InitialDirContext(environment); 
final ConnectionFactory factory = (ConnectionFactory)ctx.lookup("PRIMARY_QCF");  
final Destination destination = (Destination)ctx.lookup("Q_LIST"); 
final javax.jms.Connection connection = factory.createConnection(); 
connection.start(); 
final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
final MessageProducer producer = session.createProducer(destination); 

ObjectMessage message = session.createObjectMessage(msg); 
producer.send(message); 

摘自Ant構建導致

[javac] [loading javax\naming\Context.class(javax\naming:Context.class)] 
[javac] [loading javax\naming\directory\InitialDirContext.class(javax\naming\directory:InitialDirContext.class)] 
[javac] [loading javax\jms\ConnectionFactory.class(javax\jms:ConnectionFactory.class)] 
[javac] [loading javax\naming\Name.class(javax\naming:Name.class)] 
[javac] [loading javax\jms\Destination.class(javax\jms:Destination.class)] 
[javac] [loading javax\jms\Connection.class(javax\jms:Connection.class)] 
[javac] C:\work\tla\ja11\projects\common\src\com\ntrs\tla\controller\MemberListController.java:1474: cannot find symbol 
[javac] symbol : method createConnection() 
[javac] location: interface javax.jms.ConnectionFactory 
[javac]   final javax.jms.Connection connection = factory.createConnection(); 
[javac]              ^
[javac] [loading javax\jms\Session.class(javax\jms:Session.class)] 
[javac] C:\work\tla\ja11\projects\common\src\com\ntrs\tla\controller\MemberListController.java:1479: cannot find symbol 
[javac] symbol : method createSession(boolean,int) 
[javac] location: interface javax.jms.Connection 
[javac]   final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); 
[javac]           ^
[javac] [loading javax\jms\MessageProducer.class(javax\jms:MessageProducer.class)] 
[javac] C:\work\tla\ja11\projects\common\src\com\ntrs\tla\controller\MemberListController.java:1483: cannot find symbol 
[javac] symbol : method createProducer(javax.jms.Destination) 
[javac] location: interface javax.jms.Session 
[javac]   final MessageProducer producer = session.createProducer(destination); 
[javac]            ^
[javac] [loading javax\jms\ObjectMessage.class(javax\jms:ObjectMessage.class)] 
[javac] C:\work\tla\ja11\projects\common\src\com\ntrs\tla\controller\MemberListController.java:1486: cannot find symbol 
[javac] symbol : method send(javax.jms.ObjectMessage) 
[javac] location: interface javax.jms.MessageProducer 
[javac]   producer.send(message); 
+0

幾個問題:你使用的是哪個版本的JDK,你能打印出你的確切的類路徑,它們是按照罐子的加載順序(ant會用調試標誌打印給你的),你能列出導入語句你的頂部源代碼? – Jere

+0

感謝您的幫助。原來我在舊的jms.jar文件中。取代它,現在編譯。 – user1675717

回答

2

它看起來像你有一箇舊版本(1.0.x的)上的JMS罐子你編譯器類路徑,而不是或在1.1版之前。編譯器抱怨的方法是使用JMS 1.1引入的方法。

我會仔細看看你傳遞給<javac>任務的類路徑,以確定舊的JAR來自哪裏並排除它。

+0

非常感謝 - 你是對的。替換爲適當的JAR,現在編譯。 – user1675717

+1

如果答案對您有幫助,請考慮通過點擊左側的勾號來接受它。 –