我在Eclipse中编译并运行程序,并且一切正常,但是当我将其与Ant打包并运行时,出现以下错误:
Exception in thread"main" java.lang.NoClassDefFoundError: org/supercsv/io/ICsvB
eanReader
Caused by: java.lang.ClassNotFoundException: org.supercsv.io.ICsvBeanReader
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: jab.jm.main.Test. Program will exit.
请注意,这是运行时错误,而不是Ant的编译器错误。
我以前用0个问题构建了这个项目,现在当我在lib文件夹中添加第二个软件包时,它突然对我起作用了?
这是构建文件供参考:
Builds client files into .jar
先谢谢您的帮助!
编辑:
这是我的主类构造的样子(这不是实际的文件,但这是我所基于的)。对于Java程序,其构造非常奇怪,并且可能会给Ant一些问题。关于如何重建这一点的任何建议?尝试将其分为多个部分时出现了很多错误。我以前从未见过这样的构造(是的,我了解它的工作原理(并且在编译时起作用),但是Ant可能不喜欢它)。
import java.io.FileReader;
import java.io.IOException;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.ParseDate;
import org.supercsv.cellprocessor.ParseInt;
import org.supercsv.cellprocessor.constraint.StrMinMax;
import org.supercsv.cellprocessor.constraint.Unique;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
class ReadingObjects {
static final CellProcessor[] userProcessors = new CellProcessor[] {
new Unique(new StrMinMax(5, 20)),
new StrMinMax(8, 35),
new ParseDate("dd/MM/yyyy"),
new Optional(new ParseInt()),
null
};
public static void main(String[] args) throws Exception {
ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] header = inFile.getCSVHeader(true);
UserBean user;
while( (user = inFile.read(UserBean.class, header, userProcessors)) != null) {
System.out.println(user.getZip());
}
} finally {
inFile.close();
}
}
}
public class UserBean {
String username, password, town;
Date date;
int zip;
public Date getDate() {
return date;
}
public String getPassword() {
return password;
}
public String getTown() {
return town;
}
public String getUsername() {
return username;
}
public int getZip() {
return zip;
}
public void setDate(final Date date) {
this.date = date;
}
public void setPassword(final String password) {
this.password = password;
}
public void setTown(final String town) {
this.town = town;
}
public void setUsername(final String username) {
this.username = username;
}
public void setZip(final int zip) {
this.zip = zip;
}
}
请注意,该类的名称实际上是UserBean,并且其中包含一个名为ReadingObjects的非公共类,其中包含主方法。
您可以在ant创建的jar上运行jar -tf并发布结果吗?
您能解释一下"当我在lib文件夹中添加第二个软件包时,它突然对我产生了影响?"
@Rancidfishbreath:我得到:[jar不被识别为内部或外部命令,可操作程序或批处理文件。]我无法在线找到任何可靠的解决方案,但我相信这与将JDK添加到我的Path变量有关吗? @Romain:我在我的lib文件夹中添加了第二个.jar文件并建立了路径。 多数民众赞成在它开始行动时。 在此之前,一切工作正常。 我可能会忘记其他事情,但仅此而已。
看起来您的运行时类路径缺少包含类org.supercsv.io.ICsvBeanReader的jar。
需要注意的是,调用可执行jar时,无法从命令行设置类路径。您必须在清单中进行如下设置:
这种方法将允许您如下运行jar:
java -jar CC.jar
如果没有多余的清单条目,则必须按以下方式运行jar:
java -cp CC.jar:CC-DSTAMPVALUE.jar jab.jm.main.Test
注意
只有CC.jar是可执行文件,并且需要特殊的清单。使用此模式意味着放置在lib目录中的将来的其他jar将自动包含在运行时类路径中。 (对于诸如log4j之类的开源依赖项很有用)
显然,在运行CC.jar时,如果jar文件不存在,也会出现类似的错误:-)
您在上面的帖子中提到,额外的jar是最近引入的吗?该额外的jar需要包含在CC.jar的清单" CLass-Path"条目中。病态更新我的帖子
午餐后我会看看这个。非常感谢!
没关系。我犯了一个错误。我的主要方法现在在ExcelFile中,并在build.xml中进行了更改,但仍然出现错误。新错误:"线程"主"中的异常java.lang.NoSuchMethodError:主"。主要肯定存在。我现在正在上传我的主要课程(可能是问题所在,结构很奇怪。)。
我切换回旧的build.xml,并得到了相同的新错误= /
如果类路径需要在类加载中强制执行特定顺序(由于在*通配符中的使用),则此解决方案可能不起作用。我的假设是否正确?
@hfontanez确实,但是只有两个jar包含同一类的两个不同版本时,这才是问题。我不推荐的东西
@MarkOConnor同意100%。问题在于,如果没有正确识别库依赖关系,可能会犯错误,并且最终可能会导致两个库使用同一第三方库的不同版本。我本人对此犯了罪。我认为谨慎地提到这个事实,这样其他人就不会盲目地遵循这个建议。
@hfontanez点已采取。我通常通过使用Apache常春藤来管理我的第三方依赖项来避免此问题。
这可能是由于生成的类文件的位置而发生的。例如,当您构建一个全蚀时,它将在指定为ex:bin的Output文件夹的位置生成类文件,并且在运行时会在该位置查找类文件。
因此,请检查您的蚂蚁是否在与BuildPath配置中提到的输出文件夹相同的位置生成类文件。如果没有,请将输出文件夹位置更改为您的蚂蚁生成类文件的位置。
您是否在运行jar时尝试过明确指定类路径,以确保新库在其中?
也许库1存在于默认类路径中,所以您的项目运行良好,直到您添加了不存在的库2。在Eclipse中运行时,IDE可能会为您自动将库2添加到类路径中。您可以在Eclipse中的项目的"运行配置"中检查类路径,并确保当不通过IDE运行时在其中包含所有内容。
作者在使用Ant工具打包项目时遇到了运行时错误,错误提示找不到类org/supercsv/io/ICsvBeanReader。该问题在Eclipse环境下并未出现,但在Ant打包后运行时发生。作者提供的构建文件显示其项目依赖于多个库。
756

被折叠的 条评论
为什么被折叠?



