4

我有一些第三方 jar 想要上传到我的 nexus maven repo,到目前为止,我已经找到了两种方法。

mvn deploy:deploy-file -DgroupId=<group-id> \
  -DartifactId=<artifact-id> \
  -Dversion=<version> \
  -Dpackaging=<type-of-packaging> \
  -Dfile=<path-to-file> \
  -DrepositoryId=<id-to-map-on-server-section-of-settings.xml> \
  -Durl=<url-of-the-repository-to-deploy>

我希望第 3 方库会经常更新,只要有安全更新/发布,大约每季度一次可能会更多。

上述两种方法都是手动的,您必须键入较长的命令或单击以使其发生。我更喜欢一个简单的解决方案,它不是特定于产品或需要冗长的命令行选项。

是否可以编写一个发布第 3 方 .tar.gz 的 maven pom.xmlmvn deploy

我正在使用 Maven 3.0.5

更新示例 pom.xml 根据下面的 radai 答案为我工作。

4

2 回答 2

6

我们在这里也有类似的需求,需要保留非 Maven 工件的标签并在我们的关系中更新它们。

我们这样做的方式是在版本控制中有一个“第三方”项目,它存储非 Maven 工件,每个工件都有自己的 pom 文件。

当您升级任何第三方时,您会覆盖第三方项目中的旧版本,在相关的 pom 文件中打包版本并运行"mvn deploy"以将其放入我们的存储库中。

导致 *.tar.gz 的“构建”的 pom 文件将具有这样的 pom:

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <artifactId>myArtifact</artifactId>
    <packaging>pom</packaging> <!-- so it wont auto-create any *.jars or anything -->

    <build>
        <resources>
            <resource>
                <!-- put a configuration here to copy your artifact to /target -->
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy static resource files</id>
                        <goals>
                            <goal>resources</goal>
                        </goals>
                        <phase>generate-sources</phase>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <!-- this creates your *.tar.gz -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>Create final ZIP package</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <appendAssemblyId>true</appendAssemblyId>
                            <descriptors>
                                <descriptor>platform-assembly.xml</descriptor>
                            </descriptors>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

旁边有一个看起来很像的描述符:这个将一堆东西打包为 *.tar.gz,保留 *.sh 文件的可执行标志。您需要进行编辑以满足您的需求

<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>${envClassifier}</id>
    <formats>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>yourTargetDir</directory>
            <outputDirectory>/</outputDirectory>
            <excludes>
                <exclude>**/*.sh</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>yourTargetDir</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>**/*.sh</include>
            </includes>
            <fileMode>755</fileMode>
        </fileSet>
    </fileSets>
</assembly>

编辑:如果您不需要提取/混淆/ *.tar.gz 工件,那么您有一个更简单的选项 - 使用构建助手 maven 插件的附加工件目标来简单地附加您的 *.tar.gz 以包含在部署/安装

您显然需要更新依赖于这个新工件版本的所有步伐。

于 2013-07-02T16:16:23.040 回答
2

这是我用来解决问题的 pom.xml,基于 radai 建议使用构建助手插件

<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>com.example.thirdparty</groupId>
    <artifactId>server-jre</artifactId>
    <version>7.25</version>
    <packaging>pom</packaging>


    <distributionManagement>
        <repository>
          <id>thirdparty</id>
          <url>http://localhost:8082/nexus/content/repositories/thirdparty/</url>
        </repository>
    </distributionManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>attach-artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attach-artifact</goal>
                        </goals>
                        <configuration>
                            <artifacts>
                                <artifact>
                                    <file>files/server-jre-7u25-linux-x64.tar.gz</file>
                                    <type>tar.gz</type>
                                  <classifier>linux-x64</classifier>                                        
                                </artifact>
                            </artifacts>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
于 2013-07-02T17:53:33.163 回答