即使加载了所需的javax.jms类,ant build(javac)也会出现“找不到符号”错误

时间:2012-09-16 14:18:05

标签: java ant

我正在使用我公司的Ant脚本来编译使用javax.jms API的类。它似乎无法找到这个API的任何类'方法即使ant脚本显示它正在加载类(我确实确认jms.jar在Ant构建正在使用的类路径中)。我也在使用Eclipse,这个类在Eclipse中编译得很好(使用与Ant Build脚本类路径中相同的jms.jar)。我查看了javax.jms API,它看起来像我正确编码。下面是代码的例外,后面是编译输出的摘录。

代码EXCERPT

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 BUILD结果中获取

[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);

1 个答案:

答案 0 :(得分:2)

看起来你的编译器类路径上有一个旧版本(1.0.x)的JMS jar,而不是1.1版本或者在1.1版本之前。编译器抱怨的方法是随JMS 1.1引入的方法。

我会仔细查看您传递给<javac>任务的类路径,以找出旧JAR来自哪里并将其排除。