提问者:小点点

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


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

  • 使用NexusGUI
  • 使用http://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html的说明
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来发布第三方.tar.gz,只需执行mvn部署

我正在使用maven 3.0.5

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


共2个答案

匿名用户

我们在这里也有类似的需求,需要保持非maven工件的标签并在我们的nexus中更新它们。

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

当您升级任何第三方时,您会覆盖第三方项目中的旧第三方,将版本捆绑在相关的pom文件中并运行“mvn部署”将其放入我们的存储库。

生成*. 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>

旁边有一个seAssembly描述符:这个将一堆东西打包为*. 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>

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

显然,您需要更新依赖于此新工件版本的所有步调。

匿名用户

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

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