问题:
#两个jar包,a.jar, b.jar
#各有一个配置文件,同名同路径,都是conf/db.properties,内容*不*同。
#这俩jar包都会读取*其jar内*的此配置文件
问题是:会出现混淆问题么?
答案:
# 如何读取jar保内的配置文件。
# jvm的classloader加载文件的顺序。
# 加载.class文件和其他文件有区别吗?
其他:
一定要解决此问题的,否则多个module依赖会出现很大的问题。
工程:
a.jar
public class TestAaa { public static void main(String[] args) { TestAaa.readDbProp(); System.out.println("----"); TestAaa.scanProps(); } public static void readDbProp() { //返回读取指定资源的输入流 InputStream is = TestAaa.class.getResourceAsStream("/conf/db.properties"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String s = ""; try { while ((s = br.readLine()) != null){ System.out.println(s); } } catch (IOException e) { e.printStackTrace(); } } public static void scanProps(){ Enumeration<URL> ps = null; URL url = null; try { ps = Thread.currentThread().getContextClassLoader().getResources("conf/db.properties"); System.out.println("ps.hasMoreElements()?" + ps.hasMoreElements()); // url = Thread.currentThread().getContextClassLoader().getResource("/conf/db.properties"); } catch (IOException e) { e.printStackTrace(); } while(ps.hasMoreElements()) { InputStream in = null; try { in = ps.nextElement().openStream(); Properties p = new Properties(); p.load(in); System.out.println(p.getProperty("username")); } catch (IOException e) { e.printStackTrace(); } finally { closeIO(in); } } } private static void closeIO(Closeable io) { if(io != null) { try { io.close(); } catch (IOException e) { e.printStackTrace(); } } } }
b.jar
public class TestAaa { public static void main(String[] args) { TestAaa.readDbProp(); System.out.println("----"); TestAaa.scanProps(); } public static void readDbProp() { //返回读取指定资源的输入流 InputStream is = TestAaa.class.getResourceAsStream("/conf/db.properties"); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String s = ""; try { while ((s = br.readLine()) != null){ System.out.println(s); } } catch (IOException e) { e.printStackTrace(); } } public static void scanProps(){ Enumeration<URL> ps = null; URL url = null; try { ps = Thread.currentThread().getContextClassLoader().getResources("conf/db.properties"); System.out.println("ps.hasMoreElements()?" + ps.hasMoreElements()); // url = Thread.currentThread().getContextClassLoader().getResource("/conf/db.properties"); } catch (IOException e) { e.printStackTrace(); } while(ps.hasMoreElements()) { InputStream in = null; try { in = ps.nextElement().openStream(); Properties p = new Properties(); p.load(in); System.out.println(p.getProperty("username")); } catch (IOException e) { e.printStackTrace(); } finally { closeIO(in); } } } private static void closeIO(Closeable io) { if(io != null) { try { io.close(); } catch (IOException e) { e.printStackTrace(); } } } }
main.jar
public class TestMain { public static void main(String[] args) { // TestBbb.readDbProp(); System.out.println("+++++++++++++++++++++"); TestAaa.readDbProp(); // TestBbb.scanProps(); System.out.println("+++++++++++++++++++++"); TestAaa.scanProps(); } }
测试的时候注意调整jar包的顺序。
# 可以读取多个同名配置文件
public static void scanProps(){ Enumeration<URL> ps = null; URL url = null; try { ps = Thread.currentThread().getContextClassLoader().getResources("conf/db.properties"); System.out.println("ps.hasMoreElements()?" + ps.hasMoreElements()); } catch (IOException e) { e.printStackTrace(); } while(ps.hasMoreElements()) { InputStream in = null; try { in = ps.nextElement().openStream(); Properties p = new Properties(); p.load(in); System.out.println(p.getProperty("username")); } catch (IOException e) { e.printStackTrace(); } finally { closeIO(in); } } }
# 读取单个和多个文件的路径写法
Thread.currentThread().getContextClassLoader().getResources("conf/db.properties");
TestBbb.class.getResourceAsStream("/conf/db.properties");
P
a
a
e
e
r
相关推荐
为了简化项目结构、减少资源占用以及方便管理,开发者有时会选择将多个JAR包合并成一个单一的JAR包。这个过程被称为JAR文件的合并。本文将详细讲解如何进行这项操作,并分享一个实用的合并工具。 首先,理解JAR文件...
这里提到的“打开文件搜索”是一种实用的方法,通过工具或命令行,如`jar tf <jar_file>`,可以查看jar包内的内容,快速定位所需的类或资源。 在Java开发环境中,有多种方式管理jar包: 1. **MANIFEST.MF文件**:在...
首先,我们来看标题中的核心知识点——"eclipse编译.class所需jar包"。在Eclipse中,编译Java源码(.java文件)为字节码(.class文件)是IDE的基本功能。Eclipse自带了Java编译器JDT(Java Development Tools),它...
JAR文件可以包含资源文件(如图片、配置文件等),并且支持压缩,从而减小文件大小。此外,JAR文件还可以用作Java应用程序的执行入口,通过在命令行上使用`java -jar`命令来运行。 **2. 覆盖到指定目录** 标签...
- 如果同时存在目录和jar包,且没有使用classpath*前缀,Spring默认只会加载目录下的配置文件。 2. **使用通配符**:当路径中包含通配符(如`**/*`)时,Spring将尝试加载所有匹配的配置文件。例如: - 如果配置...
然而,在打包成jar包后,应用程序的配置文件(如application.properties或application.yml)的管理与优化成为了一个问题。本文将详细介绍如何在Spring Boot打包成jar包之后,对配置文件进行外部优化配置的方法。 ...
1. **struts-default.xml**:这是Struts2的核心配置文件,位于`struts2-core.jar`库的`/org/apache/struts2/defaults`包内。它包含了框架的基本设置,如拦截器栈、默认Action配置等。 2. **struts-plugin.xml**:这...
在实际使用中,"net.sf.fjep.fatjar_0.0.23"可能会遇到的一些常见问题包括:类加载顺序问题、资源文件覆盖、JAR内的类路径配置错误等。解决这些问题通常需要对Java类加载机制和JAR结构有深入理解。 总的来说,...
3. **配置Tomcat**:确保Tomcat的`server.xml`文件已经配置了正确的Context路径,对应到你刚刚解压的Drools Workbench目录。如果未配置,你需要手动添加。例如,添加如下内容: ```xml ``` 其中,`path/to/...
当.JAR文件和.JAD文件中存在同名但值不同的属性时,系统会优先采用.JAD文件中的属性。特别地,`MIDlet-1`属性虽然非必需,但在模拟器中运行MIDlet时是必要的。 在使用和调试过程中,需要注意以下几点: 1. `MIDlet-...
如果替换JAR文件后依然遇到问题,可能需要检查项目的构建路径设置、依赖库是否正确,或者MyEclipse的其他配置是否存在问题。 总的来说,当MyEclipse在导出WAR包时遇到问题,不要急于重新安装整个IDE,而是可以尝试...
为了确保Maven能够正确识别自定义jar包,还需要创建一个同名的pom文件,并在其中声明正确的groupId、artifactId和version信息。 6. 引用自定义jar包:在Maven项目中引用自定义jar包的方法是在项目的pom.xml文件中...
这会将APK解包到一个同名的目录(`example`),包含解码的资源、XML文件以及DEX字节码。 4. **修改资源**:反编译后,你可以对源代码、资源文件或XML配置进行修改。例如,如果你想修改应用的图标,可以编辑`res/...
在Android开发领域,APK是应用的安装包文件,它包含了所有必要的代码、资源和配置文件,以便在Android设备上运行。"安卓apk反编译"是一个常见的技术实践,主要目的是为了查看、修改或分析APK文件的内容。APK反编译...
Maven是Java开发中的一款强大的构建工具,它通过配置文件POM(Project Object Model)来管理项目的依赖关系,简化了项目的构建、测试和部署过程。Eclipse是一款广泛使用的Java集成开发环境,而Maven的Eclipse插件则...
2. **配置文件路径**:通过`CONF_DIR=$DEPLOY_DIR/conf`设置配置文件所在的目录。 3. **日志输出路径**:定义`LOGS_DIR`变量用于指定日志文件的存储路径,确保日志文件能够被正确记录。 4. **读取配置信息**: - ...
这将生成一个与APK同名的文件夹,其中包含反编译后的资源和配置文件。 3. **处理.dex文件**:在解压后的APK文件夹中,找到`classes.dex`文件。使用dex2jar将其转换为.jar文件: ``` java -jar ~/path/to/dex2jar...
综上所述,SpringBoot的核心配置文件、更改端口的方法、启动时执行特定代码的策略、防范CSRF攻击的措施、配置文件之间的区别、SpringBoot的一些局限性、核心注解及其组成以及嵌入式服务器的概念和优势等方面,都是...
- **问题**:如果类定义在一个包内,并且该包没有正确地在文件系统中创建,将会导致编译失败。 - **解决方法**:确保文件系统的目录结构与包声明匹配。例如,对于`package com.example.myapp;`,应在`classpath`中...
APKTool 支持解析 APK 文件的资源文件,包括 XML 配置文件、图片、布局等,并将其转换回人类可读的形式。 **apktool.bat** 是 APKTool 的 Windows 版本的批处理文件,用户可以直接在命令行环境下运行。通过执行这个...