【问题标题】:How do I exclude the sources jar in mvn deploy?如何在 mvn deploy 中排除源 jar?
【发布时间】:2020-01-09 17:15:04
【问题描述】:

当我运行“mvn deploy:deploy”时,maven 将 4 个 jar 文件部署到我的内部远程存储库。

他们是:

[模块名称]-1.jar
[模块名称]-1.pom
[模块名称]-1-sources.jar
[模块名称]-1-tests.jar

实际上还有更多的文件,例如 md5 和 sha1 文件,正在部署中。但为简单起见,我只是在这里跳过这些文件。

有什么方法可以将 [module-name]-1-sources.jar 从部署过程中排除?

我能想到的一种方法是使用“mvn deploy:deploy-file”,它可以让我确定要部署的 jar。但是由于我有几十个模块要部署,如果我可以在 pom.xml 中配置部署文件排除,那就太好了。否则,我将不得不编写一个脚本来部署。

谢谢,
理查德

【问题讨论】:

  • 仅供参考,不部署“-tests.jar”se here

标签: maven-2 deployment


【解决方案1】:

maven-source-plugin2.2 版本开始,您可以使用配置选项跳过源代码生成,而无需将插件放在父 pom 的配置文件中:

  <!-- Do not generate a source jar -->
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.2.1</version>
    <configuration>
      <skipSource>true</skipSource>
    </configuration>
  </plugin>

【讨论】:

    【解决方案2】:

    如果您不想修改 POM,可以通过在命令行中添加环境变量来跳过源 jar 创建:

    -Dsource.skip(对于 版本 2.4 的 maven-source-plugin,请参阅 2.4 doc

    -Dmaven.source.skip(对于 maven-source-plugin 版本 3.0.0+,请参阅 3.0.1 doclatest one

    【讨论】:

    【解决方案3】:

    有什么方法可以将 [module-name]-1-sources.jar 从部署过程中排除?

    如果您不想部署源,请不要生成源。因此,要么删除以下内容(您必须在 POM 中拥有),要么将其放入您在发布期间不使用或排除的配置文件中(我想知道在这种情况下您何时使用源):

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <executions>
            <execution>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    

    【讨论】:

    • 没错。我可以从父 pom.xml 中删除 maven 源插件。但是,我想这样做。我想将 Maven 源插件保留在父 POM 中。但是提供一个配置文件来禁用源插件。这将是理想的,但不确定它是否可行。我试试看。
    • @Richard 我不认为您可以在配置文件中“禁用”插件,因此您必须以另一种方式进行操作:将 maven-source-plugin 声明放入配置文件(默认激活)例如)并在发布期间删除配置文件:mvn -P!my-profile deploy
    【解决方案4】:

    让我假设您不应该跳过为模块生成源代码。 在这种情况下,这将是一个简单的解决方案,可以帮助您处理这种情况:

    plugins部分下“maven-source-plugin”的执行部分, 将附加属性设置为 false。此配置将为您的模块生成 sources.jar,但不会将其附加到项目的工件列表中。

    示例 sn-p 在这里:

    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>${source.plugin.version}</version>
            <executions>
                <execution>
                    <id>module1-sources</id>
                    <phase>verify</phase>
                    <goals>
                        <goal>jar-no-fork</goal>
                    </goals>
                    <configuration>
                        <!-- The below specified attribute 'attach' will disable the sources.jar not included in the artifact list -->
                        <attach>false</attach>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
    

    【讨论】:

      【解决方案5】:

      部署插件maven站点:

      http://maven.apache.org/plugins/maven-deploy-plugin/index.html

      根据我在那里阅读的内容,您似乎可以从部署中排除模块,但不能排除单个文件 - 至少现在还不能。

      如果您查看目标页面:

      http://maven.apache.org/plugins/maven-deploy-plugin/plugin-info.html

      它没有显示您正在寻找的插件的任何特定配置。由于目标页面是由插件类制成的,通过查看注释,我会说他们没有能力。

      您可以做的一件事是创建一个不同的构建,该构建不会创建您不想创建的 jar - 即为该构建制作一个不同的程序集包等,并在您运行该构建时运行尝试部署特定的包。


      编辑:koppernickus 对此有完整的描述,我建议你看看他的帖子。

      【讨论】:

        【解决方案6】:

        Maven mvn deploy:deploy 在 Maven 进程(默认生命周期)期间部署所有生成的工件。要不部署[module-name]-1-sources.jar,您应该简单地(?)不生产一个。如果您使用maven-source-plugin 附加源文件,请不要再使用它。

        如果您遇到的不是这种情况,请提供更多详细信息:

        1. 如何生成[module-name]-1-sources.jar 工件(哪个插件生成此工件?)
        2. 为什么需要生成源,但不需要将它们部署到存储库?

        【讨论】:

        • @koppernickus 我们将源代码保存在发布存储库中,而不是快照存储库中。在产品版本需要由外部实体审核的行业中,这实际上可能是一种常见做法。
        • @sal 请考虑将 mvn-release-plugin (maven.apache.org/plugins/maven-release-plugin) 用于发布到非快照存储库的任何工件。该过程如下所示: 1. 对于快照(假设这是最常见的情况):只需执行“mvn clean install”-> 删除源作为附加工件。 2. 对于发布(假设这很少使用):执行 mvn release:prepare 然后 mvn:perform 无论如何 - 如果您需要与快照稍有不同(“更重”)的发布过程,请尝试这个插件。在我们的例子中,它工作得很好。
        • 这是对问题 2 的回应。我们确实将部署配置文件与发布插件一起使用,以使流程自动化。是的,它很重。但审核过程要重得多
        • 我们想提供二进制 jars 供第三方构建,但我们不想提供我们的源代码。
        【解决方案7】:
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <version>3.0.1</version>
            <configuration>
                <attach>false</attach>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <id>attach-sources</id>
                    <goals>
                        <goal>jar</goal>
                    </goals>           
                </execution>
            </executions>
        </plugin>
        

        attach 参数指定是否将 java 源附加到项目的工件列表中。
        &lt;attach&gt;false&lt;/attach&gt;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-25
          • 1970-01-01
          • 2011-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多