繁体   English   中英

Maven 在构建 jar 时损坏 src/main/resources 中的二进制文件

[英]Maven corrupting binary files in src/main/resources when building jar

我在从 src/main/resources/lib 文件夹分发 dll 的 maven 项目中遇到问题。

该项目使用 maven-assembly-plugin 构建为具有依赖项的单个 jar。

不幸的是,maven 进程在复制过程中破坏了我的 dll 库,因此它们对应用程序不再有用。

我看过诸如资源过滤之类的概念。

这是我的相关 pom.xml

有没有人有任何想法?

我想我需要做这样的事情,但到目前为止它对我不起作用。

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>

                    <resources>
                        <resource>
                            <directory>${basedir}/src/main/resources/lib</directory>
                            <filtering>false</filtering>
                        </resource>
                    </resources>

                    <archive>
                        <manifest>
                            <mainClass>de.bochumuniruhr.psy.bio.behaviourcoder.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>

我的最终解决方案(基于以下答案):

谢谢你的好答案。 我最终得到了不需要扩展 maven-resources-plugin 配置的答案。 我将二进制文件放在src/main/resources/unfiltered-resources文件夹中,因为我需要过滤其他资源。

这是源代码的链接。

以下是我在撰写本文时的最终工作 pom。

<build>
        <finalName>BehaviourCoder_${git.build.time}_${git.commit.id.describe-short}</finalName>
        <resources>
            <resource>
                <directory>${basedir}/src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>${basedir}/src/main/unfiltered-resources</directory>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>pl.project13.maven</groupId>
                <artifactId>git-commit-id-plugin</artifactId>
                <version>2.2.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
                    <injectAllReactorProjects>true</injectAllReactorProjects>
                    <dateFormat>yyyy-MM-dd_HHmmss</dateFormat>
                    <dateFormatTimeZone>UTC</dateFormatTimeZone>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>de.bochumuniruhr.psy.bio.behaviourcoder.Main</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>

这部分:

                <resources>
                    <resource>
                        <directory>${basedir}/src/main/resources/lib</directory>
                        <filtering>false</filtering>
                    </resource>
                </resources>

应该在<build/>部分下,如下所示:

 <project>
      <build>
          <resources>
              <resource>
                  <directory>${basedir}/src/main/resources/lib</directory>
                  <filtering>false</filtering>
              </resource>
          </resources>
          <plugins>
              ...
          </plugins>
      </build>
 </project>

当程序集插件启动时已经太晚了,因为资源已经被 maven 资源插件复制了。 您应该排除早期阶段的过滤(当资源被 maven 资源插件复制到目标文件夹时)。

请参阅 maven 的文档如何执行此操作: https : //maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html

对于您的情况,这可能类似于:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <version>3.0.2</version>
            <configuration>
                <nonFilteredFileExtensions>
                    <nonFilteredFileExtension>dll</nonFilteredFileExtension>
                </nonFilteredFileExtensions>
            </configuration>
        </plugin>
    </plugins>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM