我有来自同一groupId(org.webjars)的几个工件,我需要解压缩它们,然后将所有包含的js文件复制到同一目录中.
工件存档具有层次结构(压缩为jar),如下所示:
artifact1
- resources
- webjars
- ...
- sample-1.js
- sample-2.js
Run Code Online (Sandbox Code Playgroud)
我最后需要将每个js文件复制到没有层次结构的同一目录中,如下所示:
outputDirectory
- sample-1.js
- sample-2.js
- ...
- sample-n.js
Run Code Online (Sandbox Code Playgroud)
我能达到的结果如下:
outputDirectory
- artifact-1
- resources
- webjars
- ...
- sample-1.js
- sample-2.js
- ...
- artifact-m
- resources
- webjars
- ...
- sample-n.js
Run Code Online (Sandbox Code Playgroud)
为此,我使用了maven-dependency-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack org.webjars dependencies</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>org.webjars</includeGroupIds>
<includes>**/*.js</includes>
<outputDirectory>${project.build.directory}/static</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这个插件有一个神奇的选择吗,或者我需要另一个插件来完成这项工作?
编辑:这是我最终使用的解决方案:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution> …Run Code Online (Sandbox Code Playgroud) 我的多个使用 maven-assembly-plugin 的 Maven 项目需要将两个二进制文件复制到一个文件夹中。
这些是我所有项目共有的两个原始文件:
执行程序
程序运行程序
我希望重复使用这组文件。它们可能来自诸如 JAR 或 ZIP 文件之类的依赖项,以便稍后在我的构建过程中解压它们。这样,如果我以后选择升级二进制文件,我可以创建我的公共项目的新版本,只需将依赖项更改为我的公共项目。这样做的另一个原因是因为我想在单个项目中使用最少的构建相关文件的数量。
现在,棘手的部分是我需要在解压依赖项时重命名每个文件。例如,对于项目 A,我需要按如下方式复制文件:
bin/projectA_procrun.exe
bin/projectA_procrunw.exe
我的部分解决方案是将这两个文件放在每个 Maven 项目的 src/main/build/bin 文件夹中。
这并不理想,但至少我能够重用本页中描述的通用程序集文件的内容:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>my_assembly</id>
<formats>
<format>zip</format>
</formats>
<files>
<file>
<source>src/main/build/bin/procrun.exe</source>
<outputDirectory>bin</outputDirectory>
<destName>${myexecutable.name}.exe</destName>
</file>
<file>
<source>src/main/build/bin/procrunw.exe</source>
<outputDirectory>bin</outputDirectory>
<destName>${myexecutable.name}w.exe</destName>
</file>
</files>
<!-- Additional details ommitted -->
</assembly>
Run Code Online (Sandbox Code Playgroud)
Assembly 中的outputFileNameMapping属性允许重命名工件,但不允许重命名程序集中的文件。
一次失败的尝试是将每个文件注册为一个单独的 Maven 工件。这样,我可以在与我的每个工件对应的部分中使用 outputFileNameMapping。
我遇到的问题是 Nexus 不喜欢将“exe”作为工件。
关于如何通过增强我的部分或采用替代方法来实现预期结果的任何想法?