如何在Maven项目中打包资源?
我正在寻找建立图像文件maven web项目的建议。 src / main / java下的一个类需要使用图像文件。 我的问题是,如果我将图像文件放在src / main / webapp / images以及src / main / resources / Images下,那么应用服务器在运行时(myeclipse可以在哪里)找不到该路径,因为war archive没有指定路径“SRC /主/ web应用/图像”。
我的问题是我应该在哪里放置我的项目可以找到它的图像文件,而不会提示任何错误或exception。
我在用
- 带有Mavenized falvour的Java Web应用程序
- MyEclipse 10
- 应用服务器:JBoss 6
目前我确实有以下dir结构
项目目录结构
-src/main/java -- classes -src/main/resources -- applicationContext.xml -src/main/resources/Images -- myImage.png (target image) -src/test/java -- test classes -src/test/resources (nothing) -src -- main --- webapp --WEB-INF ---faces-config.xml ---web.xml --Images --OtherImages --myImage.png( second place for image) --Css --Meta-INF --login.jspx --jsfPageType1 --page1.jspx --jsfPageType2 --page2.jspx -target -pom.xml
而pom.xml的构建片段如下
${basedir}/src/main/java ${basedir}/target/${project.artifactId}/classes ${basedir}/src/main/resources **/*.java ${basedir}/src/test/resources ${project.artifactId} maven-compiler-plugin ${jdk.version} ${jdk.version} true true maven-war-plugin 2.1.1 ${basedir}/src/main/webapp ${basedir}/src/main/resources ${basedir}/src/main/resources/Images
和MyProject.war的dir结构看起来像
MyProject.war --Images ---OtherImages --Css --Meta-INF --login.jspx --jsfPageType1 --page1.jspx --jsfPageType2 --page2.jspx --WEB-INF --classes ---applicationContext.xml ---com(classes package) ---Images ----myImage.png --lib --web.xml --faces-config.xml
在MyClass中,我正在尝试访问图像
第一次尝试
private static String PATH_TITLE_IMAGE = "src/main/resources/Images/myImage.png"; com.itextpdf.text.Image bckGrndImage = com.itextpdf.text.Image.getInstance(PATH_TITLE_PAGE_IMAGE);
第二次尝试
private static String PATH_TITLE_IMAGE = "src/main/webapp/Images/myImage.png"; com.itextpdf.text.Image bckGrndImage = com.itextpdf.text.Image.getInstance(PATH_TITLE_PAGE_IMAGE);
作为oers说我应该使用
MyClass.class.getResource("/images/image.jpg")
添加建议的解决方案后(但它仍然无法工作)
private static String PATH_TITLE_IMAGE = "Images/myImage.png"; URL url = MyClass.class.getResource(PATH_TITLE_IMAGE); com.itextpdf.text.Image bckGrndImage = com.itextpdf.text.Image.getInstance(url);
提前致谢
所有Maven项目的默认资源目录是
src/main/resources
,它们将最终出现在目标/类和WAR中的WEB-INF / classes中。 目录结构将在此过程中保留。
. |-- pom.xml `-- src `-- main |-- java | `-- com | `-- example | `-- projects | `-- SampleAction.java |-- resources | `-- images | `-- sampleimage.jpg `-- webapp |-- WEB-INF | `-- web.xml |-- index.jsp `-- jsp `-- websource.jsp
建议的资源放置方式是在src/main/resources
参考: 添加和过滤外部Web资源
您的问题似乎就是您阅读图像的方式。 您不能(或不应该)从路径中读取图像。 路径可能会在每个系统上发生变化。
您需要从类路径中读取图像,如:
MyClass.class.getResource("/images/image.jpg")
要么
MyClass.class.getResourceAsStream("/images/image.jpg")
为此,图像文件夹需要位于类路径上。 Maven会将所有内容放在classpath中,即main / resources下。 那就是你的图像文件夹所在的位置。
您可以使用maven-resources-plugin
将内容复制到所需位置。
这样的事情
maven-resources-plugin 2.5 copy-resources validate copy-resources
编辑:根据您下面的评论,我认为您需要的是一个属性文件,您可以在其中维护资源文件夹的路径。 那条道路将是一条绝对的道路。 根据您的部署,您可以在属性文件中更改该路径。