【问题标题】:jaxb.properties file from java package not included in Maven built .war来自 java 包的 jaxb.properties 文件未包含在 Maven 构建的 .war 中
【发布时间】:2011-11-24 09:51:11
【问题描述】:

我将一个 jaxb.properties 文件放在我的类所在的包中,我使用不同的 JAXB 提供程序(如此链接 Specifying EclipseLink MOXy as Your JAXB Provider 所示)用于解组。

会发生以下情况:

  • 当我从 Eclipse/STS 运行项目时,解组工作正常, 因为它读取 jaxb.properties 文件。

  • 当我使用 Maven 3 (mvn clean install) 构建项目时,包中不包含 jaxb.properties 文件 - 因此这些类无法成功解组 XML 文件。然后我必须通过导航到部署的应用程序,输入包并粘贴文件来手动放置 jaxb.properties 文件。

解决方案?谢谢!

【问题讨论】:

    标签: java maven jaxb


    【解决方案1】:

    您应该将资源(如 jaxb.properties)放入 src/main/resources
    我还找不到任何证明/文档,但我确信 maven 只会编译和复制 .java 文件夹中的 .java 文件。

    从文档看来,compile 只会编译而不复制任何内容。因此只会处理 src/main/java 下的 .java 文件,而忽略其他所有内容。

    资源由自动执行的resources:resources 处理。这个目标从src/main/resources复制资源。

    Compile 只编译来自 src 文件夹的文件。资源文件不是 java 文件,因此不会被复制/编译到输出目录。

    【讨论】:

    • @HDave 我相信他把属性放到了 src/main/resources
    • 这是正确的,并且很好地解释了问题,但不起作用 - jaxb.properties 必须进入 /classes/path/to/model 文件夹。 Matthew Fellows 的回答很有帮助。
    • 它有效。必须将包结构映射到资源文件夹结构。 Maven 将属性复制到正确的路径。无需摆弄它的行为。
    【解决方案2】:

    正如 oers 所暗示的,最好的办法是使用 maven-resources-plugin 来实现这一点。

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target/classes/path/to/model/</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}/src/main/resources/</directory>
                                    <includes>
                                        <include>jaxb.properties</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin> 
    

    将您的jaxb.properties 文件放入directory 并指定包位置(outputDirectory),这将在打包之前复制资源。

    【讨论】:

    • 在我的情况下,&lt;phase&gt;validate&lt;/phase&gt; 部分是错误的,因为我想该文件夹在那个阶段不存在。我将其更改为&lt;phase&gt;process-resources&lt;/phase&gt;,现在可以使用了
    【解决方案3】:

    添加到你的 pom.xml

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/jaxb.properties</include>
                </includes>
            </resource>         
        </resources>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2021-04-26
      • 2013-08-01
      • 1970-01-01
      • 2020-01-24
      • 2023-02-12
      相关资源
      最近更新 更多