如何在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             

编辑:根据您下面的评论,我认为您需要的是一个属性文件,您可以在其中维护资源文件夹的路径。 那条道路将是一条绝对的道路。 根据您的部署,您可以在属性文件中更改该路径。