Java 如何在Maven项目中打包资源?

Java 如何在Maven项目中打包资源?,java,maven-2,maven,itext,Java,Maven 2,Maven,Itext,我在寻找建议,把图像文件maven网络项目。src/main/java下的一个类需要使用图像文件。我的问题是,如果我将映像文件放在src/main/webapp/images以及src/main/resources/images下,那么应用程序服务器在运行时(myeclipse可以在其中)无法找到该路径,因为war归档文件没有指定的路径“src/main/webapp/images” 我的问题是我应该把图像文件放在哪里,这样我的项目就可以在不提示任何错误或异常的情况下找到它 我正在使用 带有M

我在寻找建议,把图像文件maven网络项目。src/main/java下的一个类需要使用图像文件。我的问题是,如果我将映像文件放在src/main/webapp/images以及src/main/resources/images下,那么应用程序服务器在运行时(myeclipse可以在其中)无法找到该路径,因为war归档文件没有指定的路径“src/main/webapp/images”

我的问题是我应该把图像文件放在哪里,这样我的项目就可以在不提示任何错误或异常的情况下找到它

我正在使用

  • 带有Mavenized falvour的Java Web应用程序
  • 髓鞘10
  • 应用服务器:JBoss6
目前我有以下目录结构

项目目录结构

xml的构建片段如下所示

<build>
    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
    <outputDirectory>${basedir}/target/${project.artifactId}/classes</outputDirectory>
    <resources>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>${basedir}/src/test/resources</directory>
      </testResource>
    </testResources>
    <finalName>${project.artifactId}</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>${jdk.version}</source>
          <target>${jdk.version}</target>
          <optimize>true</optimize>
          <useProjectReferences>true</useProjectReferences>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <configuration>
          <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory>
          <webResources>
            <resource>
              <directory>${basedir}/src/main/resources</directory>
              <directory>${basedir}/src/main/resources/Images</directory>
            </resource>
          </webResources>
        </configuration>
      </plugin>
    </plugins>
  </build>
在MyClass中,我尝试访问图像

第一次尝试

第二次尝试

正如奥尔斯所说,我应该使用

MyClass.class.getResource("/images/image.jpg")
添加建议的解决方案后(但仍不起作用)

提前谢谢

所有Maven项目的默认资源目录为
src/main/resources
将在目标/类和 战争中的WEB-INF/类。目录结构将被保留 在这个过程中

建议在
src/main/resources


参考资料:

您的问题似乎在于阅读图像的方式。您不能(或不应该)从路径读取图像。每个系统上的路径都可能发生变化

您需要从类路径读取图像,如下所示:

MyClass.class.getResource("/images/image.jpg")


要使其工作,图像文件夹必须位于类路径上。Maven将把所有内容放在类路径中,即main/resources下。这就是你的图像文件夹应该在的地方。

你可以使用
maven资源插件
将内容复制到所需的位置

像这样的

<plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.5</version>
      <executions>
        <execution>
          <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory><!--your path here--></outputDirectory>
                <resources>          
                  <resource>
                    <directory><!--path-here--></directory>
                   </resource>
              </resources>              
            </configuration>      
          </execution>
        </executions>
      </plugin>

maven资源插件
2.5
复制资源
验证
复制资源
编辑:
根据您在下面的评论,我认为您需要的是一个属性文件,您可以在其中维护到resources文件夹的路径。这条路将是一条绝对的路。根据您的部署,您可以在属性文件中更改该路径

如何在程序中获取/查找图像?如果我在Myeclipse上运行应用程序,则myclass具有path属性,即path=“src/main/webapp/Images/myimage.png”我已将代码更改为myclass.class.getResource(“Images/myimage.png”);但仍然找不到任何路径或URL。您能列出war文件的外观(目录/文件结构)吗?您可以编辑您的问题以插入此信息。我已尝试了这两种情况,但在这两种情况下,应用程序均未找到图像文件并引发异常,消息“ProjectPath/MyProject/Images/myImage.png”未找到。请显示war文件的内容以及加载问题中图像的确切源代码,我想我们彼此误解了:)有了这个建议,我可以将src/main/resources/Images中的一个图像打包到war/Images中。但如果我想通过单元测试运行MyClass,请指定如何访问它。我的意思是,如果我想在myeclipse中运行应用程序而不是在应用程序服务器上运行,我如何访问该映像。谢谢
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);
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);  
.
 |-- pom.xml
 `-- src
     `-- main
         |-- java
         |   `-- com
         |       `-- example
         |           `-- projects
         |               `-- SampleAction.java
         |-- resources
         |   `-- images
         |       `-- sampleimage.jpg
         `-- webapp
             |-- WEB-INF
             |   `-- web.xml
             |-- index.jsp
             `-- jsp
                 `-- websource.jsp
MyClass.class.getResource("/images/image.jpg")
MyClass.class.getResourceAsStream("/images/image.jpg")
<plugin>
      <artifactId>maven-resources-plugin</artifactId>
      <version>2.5</version>
      <executions>
        <execution>
          <id>copy-resources</id>
            <!-- here the phase you need -->
            <phase>validate</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory><!--your path here--></outputDirectory>
                <resources>          
                  <resource>
                    <directory><!--path-here--></directory>
                   </resource>
              </resources>              
            </configuration>      
          </execution>
        </executions>
      </plugin>