如何使用现有的pom.xml将第三方文件发布到远程maven仓库?

时间:2013-07-02 16:04:35

标签: java maven maven-3 nexus

我有一些第三方罐子,我想上传到我的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>

我希望第三方库经常更新,当有安全更新/发布时,可能会更频繁地说四分之一。

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

是否可以编写maven pom.xml,只需执行mvn deploy

即可发布第三方.tar.gz

我正在使用maven 3.0.5

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

2 个答案:

答案 0 :(得分:5)

我们在这里有类似的需求,保留非maven工件的标签并在我们的连接中更新它们。

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

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

导致* .tar.gz的“build”的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>

旁边有一个seembly描述符: 这个包装了一堆东西* .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工件,您有一个更简单的选项 - 使用build helper maven plugin's attach artifact goal只需附加您的* .tar.gz以包含在部署/安装中< / p>

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

答案 1 :(得分:2)

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

<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>