为什么spring boot modify jar in source resources?

Why spring boot modify jar in source resources?

我的 spring 启动结构是这样的:

/src/main/resources/
  +- /lib
     +- logback-classic-1.1.9-source.jar
     +- logback-classic-1.1.9.jar

和我使用的 pom :

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <resources>  
       <resource>  
           <directory>src/main/resources/</directory>  
           <filtering>true</filtering>  
           <includes>  
               <include>**/*</include>  
           </includes>  
       </resource>    
   </resources> 
</build>

然后我将 spring 引导项目打包到 war 文件中。 当我使用 mvn clean install 获取 war 文件时,令我震惊的是 logback-classic-1.1.9-source.jarlogback-classic-1.1.9.jar中的war已改!! 源 lib 文件中的两个 jar 都是 248KB,但在 war 文件中,它们发生了变化 到 418KB 和 420KB!! jar坏了,7-zip无法解压!

我不知道为什么。任何人都可以帮助我吗?谢谢!

我也可以用

<excludes>
    <exclude>**/*.jar</exclude> 
</excludes>

排除将 jar 移入 war,但我只想知道我的代码有什么问题让 spring 引导更改资源中的 jar。

我也尝试了spring项目,这样的话,一切都OK!我的 jar 在 war 文件中没有改变。

您在 src/main/resources 路径下有库,它们被复制时 filtering 设置为 true。所以在复制资源的过程中,如果包含${...}.

形式的String,就会被修改

第一个解决方案是不将 jars 作为资源包括在内。您真的需要最终工件中的源 jar 吗?如果没有,请删除此 lib 文件夹并向 logback-classic jar 添加依赖项:

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.9</version>
</dependency>

顺便说一句,最新版本是1.2.3。当您使用 mvn package 构建项目时,使用它会将 logback-jar 放在它所属的位置,并且是添加依赖库的正常方式。

如果你真的想在资源中保留这个,你应该从过滤中排除 lib 目录并复制它不过滤:

<resources>
    <resource>
        <directory>src/main/resources/</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/*</include>
        </includes>
        <excludes>
            <exclude>lib</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources/lib</directory>
        <filtering>false</filtering>
        <includes>
            <include>**/*</include>
        </includes>
    </resource>
</resources>