小编bea*_*ker的帖子

使用 Sonatype Nexus OSS 基于功能的开发

我想知道是否可以同时在多个功能分支上处理 Maven 项目,并避免不断覆盖 Nexus 中其他功能分支产生的工件。

我正在一个跨国项目中工作,该项目使用 gitflow 工作流来开发多个组件(30+)。每个组件都有一个 git 存储库,因此 gitflow 工作流应用于每个组件。所以每个组件都有一个开发和几个功能分支。通常,每个组件产生至少一种由其 GAV 识别的人工制品。

假设我们有组件 A(带有特征分支 feature/A-foo 和 feature/A-bar)和 B(带有特征分支 feature/B-foo)

Component A:
A:develop
A:feature/A-foo
A:feature/A-bar

Component B:
B:develop
B:feature/B-foo
Run Code Online (Sandbox Code Playgroud)

A:feature/A-foo 和 B:feature/B-foo 工作在同一个主题上,需要交换快照版本以测试它们的交互(例如客户端/服务器功能)。组件 A 和 B 只能通过 Nexus 交换工件(无法访问其他组件的源代码)。因此,A:feature/A-foo 必须部署其快照工件以使其可用于 B:feature/B-foo,反之亦然。

但是当 A:feature/A-bar(适用于完全不同的主题)之后部署时,由于相同的 GAV 和更新的时间戳,它会“覆盖”Nexus 中的快照工件,并且 B:feature/B-foo 将导入在其下一个构建中出现错误的工件。

一种解决方案是使用功能名称(例如 foo)扩展 GAV:

some.company.componentA-1.2.3-foo.jar
some.company.componentA-1.2.3-bar.jar
some.company.componentB-3.2.1-foo.jar
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以避免 A:feature/A-foo 覆盖 A:feature/B-bar 的工件,因为它们具有不同的 GAV。但这非常容易出错(在分支时重命名 GAV,再次合并到开发时将其重命名;如果有人忘记重命名,它会搞乱构建)。

有没有更好的解决办法?还是应该禁止在功能分支上部署?

nexus maven git-flow

6
推荐指数
1
解决办法
1076
查看次数

如何即时显示 exec-maven-plugin 的输出

我正在使用 Maven 3.1.1 和exec-maven-plugin(1.3) 以便在构建作业期间执行 bash 脚本。

bash 脚本stdout使用echo和生成输出printf。我注意到脚本的输出不会立即写入 Maven 控制台输出。相反,Maven 控制台输出“冻结”,直到它一次被 bash 脚本的多个输出行更新。我不知道更新 Maven 输出的触发器是什么(超时?完整的输出缓冲区?)但它非常慢。

让我们来看一个非常简单的 bash 脚本,例如counter.sh

#!/usr/bin/env bash
for i in `seq 1 1000`; do
  echo $i
  sleep 0.5
done 
Run Code Online (Sandbox Code Playgroud)

这是我的插件配置pom.xml

<plugin>
    <artifactId>exec-maven-plugin</artifactId>
    <groupId>org.codehaus.mojo</groupId>
    <version>1.3</version>
    <executions>
        <execution>
            <id>execute-script</id>
            <phase>package</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>${project.build.directory}/executable/counter.sh</executable>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

当我使用 执行构建作业时mvn clean package,maven 输出冻结在exec-maven-plugin并且不显示任何进度/输出,直到脚本在大约 8 分钟后完成。

当我执行另一个运行时间更长的脚本时,我每约 15 分钟得到一个输出块。

我正在寻找的是一种在 Maven 控制台输出中即时查看 …

linux bash shell maven exec-maven-plugin

5
推荐指数
1
解决办法
7261
查看次数

标签 统计

maven ×2

bash ×1

exec-maven-plugin ×1

git-flow ×1

linux ×1

nexus ×1

shell ×1