我在Eclipse上创建了一个相当大的Web项目(8个月的工作)。到目前为止,我一直在使用Eclipse构建系统。现在我想转到Ant有很多原因(其中包括能够添加某些WAR之前的任务,比如js压缩和其他......)。我发现Eclipse会自动创建一个build.xml
文件,并设置所有依赖项。问题是,如果我尝试运行它,它会失败并出现此错误:
type parameters of <TypeName>TypeName cannot be determined; no unique maximal instance exists for type variable TypeName with upper bounds TypeName,java.lang.Object
[javac] return dao.getItemByProperty(propertyName, val, objectClass);
它因为泛型错误而死亡...通常它在Eclipse上编译得很好(我知道它是一个不同的编译器......)。我怎样才能让javac使用它?
方法是:
@Override
@Transactional
public <TypeName> TypeName getItemByProperty(String propertyName,
Object val, Class objectClass) {
return dao.getItemByProperty(propertyName, val, objectClass);
}
和dao.getItem ...是
@Override
public <TypeName> TypeName getItemByProperty(String propertyName,
Object val, Class objectClass) {
Session sess = sessionFactory.getCurrentSession();
Criteria criteria = sess.createCriteria(objectClass);
criteria.add(Expression.eq(propertyName, val));
@SuppressWarnings("unchecked")
List<TypeName> results = criteria.list();
if (results != null && results.size() != 0) {
TypeName res = results.get(0);
return res;
}
return null;
}
它们分为两个类,分别实现两个接口,第一个用于服务,第二个用于dao,它们在Spring中使用。
为什么会这样? Eclipse编译器与javac有什么不同吗?
答案 0 :(得分:1)
实际使用的是什么版本的Ant,以及正在使用哪个版本的编译器?要进行健全性检查,请在您尝试运行ant的命令行中尝试此操作:
ant -v。
javac -v。
我遇到过类似的情况,一切都应该有效,但没有。在这里,Weblogic有一个比我试图使用的更早版本的ant和javac版本,而这些旧版本正在使用而不是我想要的版本。我最后编写了一个脚本,在我的PATH中显式设置这些变量,并在运行ant任务之前运行脚本。