有没有办法在类路径中的目录中包含所有jar文件?
我正在尝试java -classpath lib/*.jar:. my.package.Program
,它无法找到肯定在那些罐子里的类文件.我是否需要将每个jar文件分别添加到类路径中?
NoClassDefFoundError
和之间有什么区别ClassNotFoundException
?
是什么导致他们被抛出?他们怎么解决?
在修改现有代码以包含新的jar文件时,我经常遇到这些throwable.对于通过webstart分发的Java应用程序,我在客户端和服务器端都点击了它们.
我遇到的可能原因:
build.xml
代码的客户端不包含的包当我今天遇到这些时,我采取了一种线索和错误的方法来使事情发挥作用.我需要更清晰和理解.
我正在尝试读取在CLASSPATH系统变量中设置的文本文件.不是用户变量.
我试图获取输入流到文件,如下所示:
将file(D:\myDir
)的目录放在CLASSPATH中并尝试以下操作:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("/SomeTextFile.txt");
InputStream in = this.getClass().getClassLoader().getResourceAsStream("//SomeTextFile.txt");
Run Code Online (Sandbox Code Playgroud)
将文件(D:\myDir\SomeTextFile.txt
)的完整路径放在CLASSPATH中,并尝试上面3行代码.
但不幸的是,他们中的任何人都在工作,我总是null
进入我的InputStream in
.
我刚读这行:
format()方法的第一件事是从名为output.vm的类路径加载Velocity模板
在这种情况下,我无法弄清楚classpath的含义.
我正在寻找一种方法来获取给定类路径目录中的所有资源名称列表,类似于方法List<String> getResourceNames (String directoryName)
.
例如,给定一个路径目录x/y/z
包含文件a.html
,b.html
,c.html
和子目录d
,getResourceNames("x/y/z")
应该返回一个List<String>
包含下列字符串:['a.html', 'b.html', 'c.html', 'd']
.
它应该适用于文件系统和jar中的资源.
我知道我可以用File
s,JarFile
s和URL
s 写一个快速片段,但我不想重新发明轮子.我的问题是,鉴于现有的公共图书馆,实施最快捷的方式是getResourceNames
什么?Spring和Apache Commons堆栈都是可行的.
我是Gradle的新手,我正在阅读文档,但我不了解它的某些部分.其中一个部分与buildscript
块连接.它的目的是什么?
如果构建脚本需要使用外部库,则可以将它们添加到构建脚本本身的脚本类路径中.您可以使用buildscript()方法执行此操作,并传入一个声明构建脚本类路径的闭包.
Run Code Online (Sandbox Code Playgroud)buildscript { repositories { mavenCentral() } dependencies { classpath group: 'commons-codec', name: 'commons-codec', version: '1.2' } }
好的但是有什么区别:
repositories {
mavenCentral()
}
dependencies {
compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
Run Code Online (Sandbox Code Playgroud)
例如,为什么有必要使用buildscript
?
我正在尝试将目录添加到应用程序运行配置文件的类路径中
如果我在VM设置中使用-cp x:target/classes覆盖,则会收到以下错误:
java.lang.NoClassDefFoundError: com/intellij/rt/execution/application/AppMain
Run Code Online (Sandbox Code Playgroud)
有关如何将目录添加到项目的类路径的任何想法?
有谁知道如何以编程方式找出java类加载器实际加载类的位置?
我经常在大型项目上工作,其中类路径变得非常长并且手动搜索不是真正的选项.我最近遇到了一个问题,类加载器加载了一个不正确的类版本,因为它位于两个不同位置的类路径中.
那么我怎样才能让类加载器告诉我实际的类文件来自磁盘的哪个位置?
编辑:如果由于版本不匹配(或其他东西),类加载器实际上无法加载类,那么我们是否可以找到它在读取之前尝试读取的文件?
记录在这里它说
此特殊前缀指定必须获取与给定名称匹配的所有类路径资源(内部,这通常通过ClassLoader.getResources(...)调用),然后合并以形成最终的应用程序上下文定义.
有人可以解释一下吗?
使用classpath*:conf/appContext.xml
而不是classpath:conf/appContext.xml
没有星号有什么区别.