我有一个maven项目,它由一个ZIP文件组成。我想直接导出这个zip文件作为maven包/ install的结果工件。也就是说,唯一的干预maven会直接将ZIP文件作为工件。
我尝试使用Maven Assembly,但这会创建一个包含我的ZIP文件的ZIp文件。我想避免这种冗余。
这可能吗?
答案 0 :(得分:3)
最简单的解决方案是使用build-helper-maven-plugin,您可以将相应的zip文件附加到pom工件。我建议将打包设置为Map<Integer, Function<Matcher, String>> replacements = new HashMap<>() {{
put(1, matcher -> "");
put(2, matcher -> " " + matcher.group(2));
}};
String input = "lorem substr1 ipsum substr2 dolor substr3 amet";
// create the pattern joining the keys with '|'. Need to add groups for referencing later
String regexp = "(\\s{2,})|(\\.(?:[a-zA-Z]))";
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(regexp);
Matcher m = p.matcher(input);
while (m.find()) {
//TODO change to find which groupNum matched
m.appendReplacement(sb, replacements.get(m.group(groupNum)));
}
m.appendTail(sb);
System.out.println(sb.toString()); // lorem repl1 ipsum repl2 dolor repl3 amet
,但将build-helper-maven-plugin添加到pom
或install
阶段。配置可能如下所示:
deploy
答案 1 :(得分:1)
这个POM应该做的伎俩。请记住,这是不 Maven的典型用例。
正如您所指出的那样,一个程序集不会开箱即用,主要是因为<file>
汇编指令不包含<unpack>true</unpack>
。所以你需要一些帮助。我打算使用antrun
插件。
POM:
<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>org.example</groupId>
<artifactId>deploy-zip</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>deploy-zip</name>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>unpack-zip</id>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<unzip src="YOUR_ZIP" dest="${project.build.directory}/temp" />
</target>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.3</version>
<executions>
<execution>
<id>bundle-zip</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>${project.basedir}/src/main/assembly/my-zip.xml</descriptor>
</descriptors>
<appendAssemblyId>true</appendAssemblyId>
</configuration>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>nexus</id>
<name>Nexus</name>
<url>YOUR_NEXUS_URL</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>Nexus</name>
<url>YOUR_NEXUS_URL</url>
</snapshotRepository>
</distributionManagement>
</project>
汇编描述符(假设在src/main/assembly
中):
<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-zip</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<fileSets>
<fileSet>
<directory>${project.build.directory}/temp</directory>
<outputDirectory>.</outputDirectory>
</fileSet>
</fileSets>
</assembly>
如果您执行mvn deploy
并且您的凭据已按顺序排列,则应将该文件上载到存储库。
如果您希望其他人依赖此,请使用:
<dependency>
<groupId>org.example</groupId>
<artifactId>deploy-zip</artifactId>
<version>1.0-SNAPSHOT</version>
<classifier>my-zip</classifier>
<type>zip</type>
</dependency>
我希望它适合你。
答案 2 :(得分:0)
您可以使用mvn install:install-file -Dfile=yourArtifact.zip ...
将其安装在本地maven存储库中。
查看documentation。