标签: classpath

控制servlet中的类路径

我的servlet应用程序包含许多库.jars,其中一些包含嵌入的log4j.xml或log4j.properties文件.我想确保log4j首先找到我的log4j.xml!我已经尝试在servlet中搜索各种类路径元素的优先级的一些规范(例如,WEB-INF/classes总是在WEB-INF/lib之前吗?),或者某种方式来配置或调整servlet的类加载器,以便给定的资源目录出现在类路径的早期.到目前为止,我已经画了一个空白.有关确保servlet .war文件通过类加载器加载正确的log4j.xml的任何建议吗?

java tomcat servlets classpath

6
推荐指数
2
解决办法
1万
查看次数

Java的默认JAXB实现是在我的类路径上选择的

我编写了一个利用JAXB进行XSL转换的java应用程序.我在我的类路径中包含了saxon9.jar,因此我可以在命令行上使用XSLT 2.0而不是XSLT 1.0.

java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
Run Code Online (Sandbox Code Playgroud)

我在XSL中包含了代码来报告使用的XSLT.

<xsl:comment><xsl:text >
</xsl:text>XSLT Version: <xsl:value-of select="system-property('xsl:version')" /> <xsl:text >
</xsl:text>XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> <xsl:text >
</xsl:text>XSLT Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /> <xsl:text >
</xsl:text></xsl:comment>
Run Code Online (Sandbox Code Playgroud)

它报道.

XSLT Version: 1.0
XSLT Vendor: Apache Software Foundation (Xalan XSLTC)
XSLT Vendor URL: http://xml.apache.org/xalan-j
Run Code Online (Sandbox Code Playgroud)

这是JVM的默认实现.

如何使用我指定的Saxon?


跟进:

所以这些方法都不起作用(除了将撒克逊jar放在背书目录中),但它们都应该有效.看来我使用"-jar myApp.jar"和想要替代XSLT实现的组合是不兼容的.换一种说法...

java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ -jar myApp.jar

......不起作用,但这确实......

java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp

...有趣的是,我甚至不必指定工厂,我得到了撒克逊版本......

java -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp

java xml xslt jaxb classpath

6
推荐指数
1
解决办法
1万
查看次数

eclipse,一个用于编译的类路径,另一个用于启动的类路径

示例:
对于日志记录,我的代码使用log4j.但我的代码依赖的其他罐子,slf4j而是使用.因此两个罐子必须在构建路径中.不幸的是,我的代码slf4j现在可以通过上下文辅助或其他一些开发人员更改直接使用(依赖).我想任何使用slf4j显示为错误,但我的应用程序(和测试)在运行时仍然需要在类路径中.

解释:
我想知道这是否可能在eclipse中.这种情况经常发生在我身上.我将有一个大型项目,它使用了很多第三方库.当然,这些第三方罐子也有自己的依赖关系.因此,我必须在类路径(eclipse中的"构建路径")中包含所有依赖项,以便应用程序及其测试进行编译和运行(从eclipse中).

但我不希望我的代码使用所有这些jar,只是我自己决定的几个直接依赖.因此,如果我的代码意外地使用了依赖项的依赖项,我希望它显示为编译错误.理想情况下,没有找到类,但任何错误都可以.

我知道我可以在eclipse之外运行时手动配置类路径,甚至在eclipse中我可以修改我正在运行的特定类的类路径(在运行配置中),但是如果你运行了很多单独的测试用例,这是不可管理的,或者有很多main()类.

eclipse classpath

6
推荐指数
1
解决办法
196
查看次数

我可以阻止javac从我们的第三方罐子的清单中访问Class-Path吗?

自Java 1.5以来,javac一直在寻找第三方罐子的清单来寻找其他罐子.这会导致许多不良副作用:

  1. 由于jar文件已被重命名,我们现在每当编译时都会收到大量警告(可以使用-Xlint:-path)
  2. 我们不希望在类路径上的文件被带回到它上面,即使它们由于某种原因而被遗弃.
  3. 由于解决了我们实际上并不想要的东西,所以在构建中需要额外的时间来查找所有这些额外的罐子.

所以我想知道是否有人知道魔术调用来禁用它.假设Sun没有给我们带来另一个我们不想要的功能,一旦我们拥有它就无法关闭.

java jar javac manifest classpath

6
推荐指数
1
解决办法
747
查看次数

将类路径添加到包含Maven中属性文件的文件夹

我有一个属性文件,它不在Maven的类路径中.

因此我无法达到:

.ClassLoader.getSystemClassLoader()的getResourceAsStream(PROPS_FILE);

如何将包含属性文件的文件夹添加到类路径中,以便在项目的构建和测试期间可用?

classpath maven

6
推荐指数
1
解决办法
1万
查看次数

Java:来自class.getResource(...)的NullPointerException

我正在编写一个小应用程序,当我尝试创建一个ImageIcon时,我总是遇到异常.这个例外代码引起了异常:

prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png")));
Run Code Online (Sandbox Code Playgroud)

现在在我的程序中,文件夹/ icons /确实存在.我不知道它是否有所不同但是类文件在一个包中,其中icons文件夹在项目文件夹中(当你看到bin和src文件夹时).

我已经四处寻找,我找不到可以帮助我解决问题的解决方案.也许你们中的任何人都可以帮忙吗?

编辑:有人要求我的文件夹层次结构:

文件夹层次结构

我知道类文件与图标不在同一个文件夹中,但我已经创建了应用程序,我必须从不同的文件夹加载文件并执行/文件夹/始终用于工作.

编辑2:

System.out.println(getClass().getResource("/icons/icon_prayer.png") == null);
Run Code Online (Sandbox Code Playgroud)

打印真实.

java classpath

6
推荐指数
1
解决办法
2万
查看次数

在playframework app中设置classpath顺序

我有一个项目,我需要解析一些HTML文件作为播放应用程序的一部分.为了那个任务,我想我会申请nekohtml.我将nekohtml指定为dependencies.yml中的dep和isse'play dependencies'.这将nekohtml和xerces拉入lib文件夹.一切都很好.但是,nekohtml需要在类路径上的xerces之前才能正常工作.至于我在https://github.com/playframework/play/blob/master/framework/pym/play/application.py#L124上可以看到,类路径上的jar的顺序是任意的,如http:// docs.python.org/library/os.html#os.listdir 是否有可能以某种方式手动设置类路径上的jar的顺序?

编辑:我的dependencies.yml看起来像这样:

require:  
  - play
  - org.apache.poi -> poi 3.7
  - net.sourceforge.nekohtml -> nekohtml 1.9.14:
       transitive: false
  - xerces -> xercesImpl 2.9.1
Run Code Online (Sandbox Code Playgroud)

当我发出命令'play classpath'时,它列出了以下内容(摘录):

['/ home/leif/dev/java/fun/tk/conf','/ home/leif/dev/play/play1.2/framework/play-1.2.jar','/ home/leif/dev/java /fun/tk/lib/jaxen-1.1.jar','/ home/leif/dev/java/fun/tk/lib/log4j-1.2.15.jar','/ home/leif/dev/java/fun /tk/lib/junit-4.8.1.jar','/ home/leif/dev/java/fun/tk/lib/jta-1.1.jar','/ home/leif/dev/java/fun/tk /lib/dom4j-1.6.1.jar','/ home/leif/dev/java/fun/tk/lib/xercesImpl-2.9.1.jar','/ home/leif/dev/java/fun/tk /lib/commons-collections-3.2.1.jar','/ home/leif/dev/java/fun/tk/lib/xml-resolver-1.2.jar','/ home/leif/dev/java/fun /tk/lib/xml-apis-1.3.04.jar','/ home/leif/dev/java/fun/tk/lib/antlr-2.7.6.jar','/ home/leif/dev/java /fun/tk/lib/poi-3.7.jar','/ home/leif/dev/java/fun/tk/lib /commons -logging-1.1.1.jar','/ home/leif/dev/java /fun/tk/lib/nekohtml-1.9.14.jar','/ home/leif/dev/play/play1.2/framework/lib/jj-textile.jar',...

所以xerces明显领先于nekohtml,即使传递dep被排除并在nekohtml之后手动添加.

classpath playframework

6
推荐指数
1
解决办法
1023
查看次数

将jar添加到classpath,Eclipse,Android

目前,我转到属性 - >构建路径 - >库 - >然后将外部jar添加到我的类路径中,我知道这是正确的方法,对于java至少.但是,问题是我在Android SDK 2.1上运行它.当我运行程序时,我不认为android模拟器可以"找到"类路径中的.jars.这可能吗?如果是这样,在将jar添加到我的类路径之前,我将哪个文件夹放入?

eclipse android jar classpath

6
推荐指数
1
解决办法
1万
查看次数

Class.getResource()在我的Eclipse Application中返回null?无法配置classpath?

我试图用来Class.getResource("rsc/my_resource_file.txt")在Eclipse应用程序中加载文件.但是,无论我在Eclipse中做什么,类路径总是只包含Eclipse Launcher的一个条目:

... /日蚀/插件/ org.eclipse.equinox.launcher_1.2.0.v20110502.pkc

如何配置类路径?

注意:在运行时,我使用以下代码确定类路径:

URLClassLoader cl = (URLClassLoader) ClassLoader.getSystemClassLoader();
for (URL classpathURL : cl.getURLs()) {
    System.out.println(classpathURL);
}
Run Code Online (Sandbox Code Playgroud)

编辑:更多信息.

问题的根源Class.getResource("rsc/my_resource_file.txt")是返回null.在一个简单的5行"Java应用程序"中做了一些小实验,我以为我已经弄明白了,问题与类路径有关.显然,类路径与"Eclipse应用程序"的行为略有不同.我通过Class.getResource("/rsc/my_resource_file.txt")感谢BalusC 解决了这个问题.

java eclipse classpath

6
推荐指数
1
解决办法
2万
查看次数

JNI能否在类路径中实现通配符扩展?

我有一个C二进制文件,通过JNI调用Java.我将CLASSPATH设置为somedir/*以获取somedir中的所有jar.

当我运行二进制文件时,找不到所需的类定义.我跑的时候

java that.class's.name 
Run Code Online (Sandbox Code Playgroud)

从同一命令行,成功找到该类.如果我明确地将somedir /中的所有jar添加到类路径中,一切都很好,但这导致了一个很长的类路径,我想避免.

通过JNI执行的JVM是否支持类路径的通配符扩展?可以这样做吗?

c java unix java-native-interface classpath

6
推荐指数
1
解决办法
2171
查看次数