Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 在父Pom中定义的project.build.sourceEncoding在子Pom中被忽略_Maven_Encoding - Fatal编程技术网

Maven 在父Pom中定义的project.build.sourceEncoding在子Pom中被忽略

Maven 在父Pom中定义的project.build.sourceEncoding在子Pom中被忽略,maven,encoding,Maven,Encoding,给定父级pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion&g

给定父级
pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.acme</groupId>
    <artifactId>acme-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <properties>
        <java-version>1.8</java-version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <com.acme.dynamite-version>0.0.1-SNAPSHOT</com.acme.dynamite-version>
    // etc
    </properties>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.acme</groupId>
    <artifactId>child</artifactId>
    <version>dev-SNAPSHOT</version>
    <packaging>jar</packaging>
    <parent>
        <groupId>com.acme</groupId>
        <artifactId>acme-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>com.acme</groupId>
            <artifactId>dynamite</artifactId>
            <version>${com.acme.dynamite-version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
解析子pom中显式引用的属性
com.acme.dynamite version
,但忽略
project.build.sourceEncoding
。“mvn clean install”的Jenkins构建抛出了一个警告:

[警告]使用平台编码(实际上是UTF-8)复制过滤后的资源,即构建依赖于平台

有没有办法让子pom识别
project.build.sourceEncoding
?这不是一个多模块项目,我只是尝试将属性整合到一个位置

您需要添加以激活筛选,如下所示:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-resources-plugin</artifactId>
      <version>3.0.1</version>
      <configuration>
        ...
        <encoding>UTF-8</encoding>
        ...
      </configuration>
    </plugin>
  </plugins>
  ...
</build>

org.apache.maven.plugins
maven资源插件
3.0.1
...
UTF-8
...
...

在父POM中定义的属性。。。但为此,需要在构建子级之前安装定义这些属性的父级POM。这就是问题所在:

  • 拥有版本0.0.1-SNAPSHOT的父级完全声明了属性
    UTF-8
    。但是,本地存储库中未安装定义此属性的父级版本
  • 当尝试构建子项目时,Maven将在本地repo中查找任何依赖项和父POM。它将找到不带该属性的父级版本并继续生成。然后,
    maven资源插件
    将发出此警告,因为没有设置编码。(默认情况下,设置
    project.build.sourceEncoding
    也会设置
  • 解决方案是首先构建父级

    在多模块Maven项目中,您只需构建父级:Maven将以先构建依赖项目的方式订购反应堆;因此,在本例中,将首先构建父级,然后构建子级(或本例中的模块),从而确保子级可以访问父级中定义的所有属性


    在多模块Maven项目之外,想法仍然是一样的,但是您需要执行两个不同的构建:首先是将正确版本安装到本地存储库的父版本,然后是子版本。请注意,当这样的父母不被使用,但更多的是作为巩固孩子们继承的共同属性的积木时,最好有一个独特的释放周期:考虑释放父母,这样每个子项目都可以继承该特定版本。

    作为Jenkins预构建步骤:清洁安装。@Paul:Jenkins上项目的构建顺序是什么?父项目不在Jenkins中(说来话长)。我已经在父级上本地完成了mvn clean安装,并将其直接上传到我们的Artifactory repo。这样做的目的是,一旦所有这些皱纹都解决了,就把它换成一个释放版。谢谢你花时间回答。谢谢。这是在家长还是孩子的pom中?“为什么有人否决了这个?”保罗回答错了<默认情况下使用code>project.build.sourceEncoding,请参阅文档,此文档不是其中之一。它将一个值重新定义为默认值(因为设置了
    UTF-8
    )。你可以添加它,如果你想,为了设置一个版本,但这不会解决你的问题。好吧,请参考我的两个意见。。。关于这个答案的评论开始变得太长了。