Java Maven项目问题整理
src/main/java文件夹
代码文件位于src/main/java文件夹中,资源文件位于src/main/resources文件夹中。 Maven将Java项目编译到target文件夹中。 /target/classes必须是根目录。 编译后,发现.class文件位于此文件夹下的相应子文件夹中,src/main/resources下的文件复制到此文件夹下。
src/test/java文件夹
Maven将src/test/java文件夹下的代码编译到target/test-classes文件夹下。 同样,如果资源文件位于src/test/resources下,会将其复制到target/test-classes文件夹下。 测试代码的执行时,优先使用test-classes文件夹下的资源文件,如果不存在,则使用classes文件夹下的资源文件。
src/main/java和src/test/java文件夹区别
第一点: src/main/java:里面的java文件只能直接加载src/main/resources下的资源,不能直接加载src/test/resources下的资源; src/test/java: 里面的java文件既能加载src/test/resources下的资源,又能加载src/main/resources下的资源,当两个resources下都有要加载的同名资源时候,优先选择src/test/java下的资源;
第二点: 若在src/main/java中某个方法使用@Test进行测试,则能读取到src/test/resources目录下的资源 例如:流程引擎中的ProcessEngines.getDefaultProcessEngine();需要加载默认文件"activiti.cfg.xml",则要将该文件放在相应的资源目录中。
读取maven项目中src/test/resources里的配置文件
2种方法。注意,只有在运行单元测试的时候才读取test目录下的文件
AppTest.class.getResourceAsStream("/example.xml");
AppTest.class.getClassLoader().getResourceAsStream("example.xml");
//如果此类是由bootstrap类加载器加载的,则使用
AppTest.class.getClassLoader().getSystemResourceAsStream("example.xml");
如果Test.class.getResource()资源是以/开头,则指向CLASSPATH根目录; 如果Test.class.getResource()是以文件(包名)开头,则相对Test.class文件所在包查找资源;
