我在从 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>
Run Code Online (Sandbox Code Playgroud)
我的最终解决方案(基于以下答案):
谢谢你的好答案。我最终得到了不需要扩展 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>
Run Code Online (Sandbox Code Playgroud)
当程序集插件启动时已经太晚了,因为资源已经被 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>
Run Code Online (Sandbox Code Playgroud)
这部分:
<resources>
<resource>
<directory>${basedir}/src/main/resources/lib</directory>
<filtering>false</filtering>
</resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
应该在这样的<build/>部分下:
<project>
<build>
<resources>
<resource>
<directory>${basedir}/src/main/resources/lib</directory>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
...
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5355 次 |
| 最近记录: |