我正在尝试以编程方式本地化一个属性文件,而不必将命令行上的完整路径名传递给我的程序.我想如果我能找到主类的路径,我可以将我的属性文件粘贴在同一目录或子目录中.
如果这不起作用,我可以通过其他方式找到属性文件的路径,而无需在命令行上传递它.
谢谢
我从Java中的自定义类加载器中加载了来自几个不同.jars的几个不同的类.我创建一个自定义URLClassLoader,向它添加几个.jars并将其传递给a ServiceLoader以找到我想要的类.
我的问题是:给定一个类,有没有办法发现它是从哪个.jar加载的?
我正在尝试让我的应用程序透明地加载资源(二进制文件):
如果该文件存在于当前目录下,请将其打开.
如果没有,请尝试查看当前的JAR文件(如果适用).
如果没有,请尝试查看其他JAR文件.(这是可选的,我不介意明确指定哪些JAR文件.)
到目前为止,我知道File哪个打开一个本地文件,ClassLoader哪个有getResource*JAR内容.
是否有一个结合了两者的课程?如果没有,我该如何自己写呢?我应该写一个ClassLoader也检查本地文件系统?用File?(我对Java非常熟悉,甚至不知道返回什么样的好类型.InputStream?)
谢谢
PS"文件"我的意思是"路径",例如"data/texture1.png".
我的JSystem/Java/Eclipse环境有些问题.
我收到此错误,我不明白错误:
java.lang.LinkageError: loader constraint violation: loader (instance of jsystem/runner/loader/ExtendsTestCaseClassLoader) previously initiated loading for a different type with name "org/w3c/dom/Document"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人有类似的问题,我不认为我的环境对于解决它是非常重要的,如果我能理解发生了什么"undergound"我希望自己解决问题.
非常感谢提前.
简介: Tomcat6无法识别WebRoot/WEB-INF/lib中的ojdbc14.jar.我想我不需要配置任何东西,只需将.jar文件放在那里就可以了.
细节:
我已经创建了一个Web应用程序并将ojdbc14.jar放在WEB-INF/lib文件夹中.当我启动Tomcat6并访问一个index.jsp页面,该页面创建一个启动与我的oracle数据库连接的对象时,会出现错误,指出"无法加载JDBC驱动程序类'oracle.jdbc.OracleDriver'".显然Tomcat6无法识别web-inf/lib/ojdbc14.jar中的'oracle.jdbc.OracleDriver'类.
我做了一些研究并推测出以下原因:
这是我的Web应用程序结构:
错误:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.OracleDriver'
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766)
at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:540)
at com.demo6.DataSourceExample.getConnection(DataSourceExample.java:18)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:63)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:384)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at …Run Code Online (Sandbox Code Playgroud) 我需要使用当前Maven构建中的"main"applicationContext -a.xml创建一个ApplicationContext.另一个来自另一个maven构建的连接类,并在Maven依赖项包含的jar中预设.
这个想法:
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {
"classpath*:applicationContext-*.xml"});
Run Code Online (Sandbox Code Playgroud)
这应该从Classpath加载applicationContext-a.xml,因为它在同一个Project中.这有效.
然后应该从dependency-jar加载applicationContext-b.xml. 这不起作用.
注意
"classpath*:applicationContext-*.xml"
Run Code Online (Sandbox Code Playgroud)
只匹配直接类路径中的XML,jar中没有任何内容.
我发现了什么:
ApplicationContext context = new ClassPathXmlApplicationContext( new String[] {
"classpath*:applicationContext-*.xml", "classpath*:applicationContext-b.xml"});
Run Code Online (Sandbox Code Playgroud)
这是有效的,但前提是我可以在jar:applicationContext-b.xml中明确告诉xml的文件名
我还需要它来进行集成测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"**/applicationContext*.xml"})
public class TestClass { ... }
Run Code Online (Sandbox Code Playgroud)
最好的想法可能是自定义装载机?必须有一种方法来使这个模式工作......
前段时间有一个解决方案,反之亦然:它只从jar获取applicationContext.xml.如果类路径中有另一个,它只匹配此文件.
我有一个SomeObject.java文件:
class SomeObject {
String name;
}
Run Code Online (Sandbox Code Playgroud)
编译它会创建一个包含字节码的SomeObject.class文件.
0xCAFEBABE...
Run Code Online (Sandbox Code Playgroud)
如果我们在JVM上使用SomeObject,它将由当前的类加载器加载,并且一切正常.
现在让我们假设我想要一些动态代码生成.我可以写我的自定义注释
@Target(ElementType.TYPE)
public @interface Data {
...
}
Run Code Online (Sandbox Code Playgroud)
并将其作为修饰符添加到类声明中:
@Data
class SomeObject {
String name;
}
Run Code Online (Sandbox Code Playgroud)
我也可以在运行时保留它@Retention(RetentionPolicy.RUNTIME):
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Data {
...
}
Run Code Online (Sandbox Code Playgroud)
用于字节码注入的注释在哪里?在使用适当的运行时保留注释加载类时,类加载器是否会注入字节码,如下图所示:
source -(compile)-> bytecode -(classloader bytecode injection)-> injected bytecode -(classloading)-> JVM loaded bytecode
Run Code Online (Sandbox Code Playgroud) 我想知道您是否有一个jar,可以动态地加载到正在运行的程序中,那么jar中的所有内容(类,资源)是否都存储在VM内存中的某个位置?
这样,每次您需要访问类或文本资源文件时(例如,通过getClass()。getResourceAsStream),都可以将其从内存中快速拉出,而不必再次访问文件系统中的jar?即您可以在此之后删除该jar。
抱歉,如果我问的是错误的问题,请改成解释类加载器过程的问题,因为我可能会误解它,尤其是对于jar中打包的资源。谢谢。
我想创建一个自定义ClassLoader来加载某些路径中的所有jar文件(例如/ home/custom/lib).
那么我希望每次使用newoperator创建一个Object时,它都会在该路径中的所有jar文件中搜索类,然后搜索parameter(-cp)定义的类路径.
可能吗?
例如,有一个jar文件 /home/custom/lib/a.jar
在主类
public class Main {
public static void main(String[] args) {
// do something here to use custom ClassLoader
// here will search Car in /home/custom/lib/a.jar first then in java class path
Car car = new Car();
}
}
Run Code Online (Sandbox Code Playgroud) 我在Web应用程序服务器单节点设置上运行Java Web应用程序,其中我使用的是我在Web-Inf中包含的自由文件并在我的代码中使用.
问题是我有另一个应用程序将其库添加到WebSphere父lib文件夹,其中一个是我正在使用的相同的版本,但是使用旧版本,会产生冲突并干扰我的代码.
服务器类加载器配置为父首先不可取,我无法改变这一事实.我的问题是,如何让我的应用程序使用我的自由文件,忽略类加载器使用的那个?
classloader ×10
java ×9
classpath ×3
jar ×3
annotations ×1
bytecode ×1
java-ee ×1
jdbc ×1
reflection ×1
spring ×1
tomcat ×1
web-inf ×1
websphere ×1