Maven直接复制为神器

时间:2015-12-10 08:21:52

标签: java maven

我有一个maven项目,它由一个ZIP文件组成。我想直接导出这个zip文件作为maven包/ install的结果工件。也就是说,唯一的干预maven会直接将ZIP文件作为工件。

我尝试使用Maven Assembly,但这会创建一个包含我的ZIP文件的ZIp文件。我想避免这种冗余。

这可能吗?

3 个答案:

答案 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添加到pominstall阶段。配置可能如下所示:

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