小编Mih*_*ila的帖子

Maven:将插件执行绑定到另一个插件的执行,而不是生命周期阶段

关于接受答案的说明:由于强有力的间接证据,我接受了答案.尽管如此,这是间接的证据,所以要带上一粒盐.


当用户运行插件目标而不是生命周期阶段时,如何触发插件?(之前已经问过,但答案是使用生命周期阶段.)

例证:我需要release:branch调用regex-plugin以生成一个当前版本作为其名称的分支,减去-SNAPSHOT后缀.这就是我所拥有的,它要求开发人员激活配置文件并调用verify阶段.我需要开发人员简单地调用release:branch,这反过来应该导致regex-plugin运行.与Gitflow有点结婚.

<profile>
    <id>Release Branch</id>
    <build>
        <plugins>
            <!-- On validate, compute the current version without -SNAPSHOT. -->
            <!-- Put the result in a property. -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>regex-property</goal>
                        </goals>
                        <configuration>
                            <value>${project.version}</value>
                            <regex>^(.*)-SNAPSHOT$</regex>
                            <replacement>$1</replacement>
                            <name>project.unqualifiedVersion</name>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Also on validate, run the branch plugin, and use -->
            <!-- the non-SNAPSHOT version thus computed in the …
Run Code Online (Sandbox Code Playgroud)

maven maven-release-plugin git-flow

22
推荐指数
2
解决办法
9110
查看次数

Bash:以编程方式获取命令的完成输出(例如,在变量中)

如何以编程方式完成另一个命令的完成?

假设我当前的目录有文件a1,a2然后a3,我怎样才能让我的命令调用自动完成ls a回来a1 a2 a3

这可能吗?


澄清和理由:

我选择ls是因为人们可以与之相关.这是一个人为的例子,但让我试着举例说明这个功能的价值.我有一个命令build,在给定目录的情况下,可以自动完成可以在该目录中构建的目标.这些目标可能与该目录中的文件不对应.目标可能是由build我不想解析的构建文件中的命令挖掘的.换一种说法:

build path/to/dir/TABTAB

可能会给:

path/to/dir/a_target
path/to/dir/b_target
Run Code Online (Sandbox Code Playgroud)

build是一个预先存在的命令,而不是我可以继续修改以适应我的目的.它提取目标的方式是我当然不想知道的.

现在假设我有一个完整的build能力项目存储库,而且我的大部分工作都是因为我的大部分build工作只在一个项目中进行.换句话说,我总是build有一些目标my/project/directory.

到现在为止还挺好.

所以我想编写一个围绕build命令的包装器,它不需要我每次运行它时都将它提供给目录路径.我希望它知道我的首选项目目录(或目录,为什么不),让我引用目标而不限定它们:

所以假设我有:

my/project/directory/a_target
my/project/directoryb_target
Run Code Online (Sandbox Code Playgroud)

我要这个:

mybuildTABTAB

给我:

a_target
b_target
Run Code Online (Sandbox Code Playgroud)

当然我需要为其编写完成代码mybuild,但是我希望它依赖于完成代码build,因为我不能只是去请求开发人员build编写build listtargets命令只是为了让我开心.该功能已经存在,在完成时build,我需要利用它.

(当然,当我运行时mybuild a_target,它会知道运行build my/project/directory/a_target,并且我知道如何实现,并且不在这个问题的范围内.)

我希望这说明了为什么我需要完成build命令并将其用作黑盒子.

bash shell tab-completion

4
推荐指数
1
解决办法
981
查看次数

不带过滤的 grep

如何在不实际过滤或突出显示的情况下进行 grep 操作?

目标是找出特定文本是否在输出中,而不影响输出。我可以tee访问一个文件,然后离线检查该文件,但是,如果输出很大,那就浪费时间,因为它仅在过程完成后才处理输出:

command | tee file
file=`mktemp`
if grep -q pattern "$file"; then
  echo Pattern found.
fi
rm "$file"
Run Code Online (Sandbox Code Playgroud)

我想我也可以使用 grep 的 before ( -B) 和 after ( -A) 标志来实现实时处理,但如果没有匹配,则不会输出任何内容。

# Won't even work - DON'T USE.
if command | grep -A 1000000 -B 1000000 pattern; then
  echo Pattern found.
fi
Run Code Online (Sandbox Code Playgroud)

有更好的方法来实现这一目标吗?类似于“假装您正在 grep 并设置退出代码,但不要 grep 任何内容”。

(实际上,我要做的是通过管道传输 stderr,因为我正在寻找某个错误,所以command | ...我将使用来代替command 2> >(... >&2; result=${PIPESTATUS[*]}),它实现了相同的效果,只是它适用于 stderr。)

bash shell grep

4
推荐指数
1
解决办法
1816
查看次数

Maven版本:回滚后准备/执行错误内容错误成功

我们在内部使用Maven和Subversion.我们还使用Maven的Release插件.我们在执行以下(正确的,我假定的)步骤时注意到了下面描述的问题.

1.我们经营release:prepare:

  • Maven将主干版本更新为1.0.0.
  • Maven运行svn copy trunk/myproject tags/myproject-1.0.0,从而创建标签myproject-1.0.0.
  • Maven将主干版本更新为1.0.1-SNAPSHOT.

2.我们经营release:rollback:

  • Maven将trunk版本重置为1.0.0-SNAPSHOT.
  • Maven没有删除标签,因为Maven不会做这种事情.

3,我们承诺更多的变化干路,显然针对的版本1.0.0-SNAPSHOT.


4.我们跑release:prepare一次:

  • Maven将主干版本更新为1.0.0.
  • Maven运行svn copy trunk/myproject tags/myproject-1.0.0,认为它创建myproject-1.0.0了最新主干的标签.但是,唉,Subversion(1.6和1.7一样)将代替tags/myproject-1.0.0/myprojectMaven 创建.

5.我们经营release:perform:

  • Maven检查标签的内容myproject-1.0.0.
  • Maven构建内容并将结果部署到Nexus.

问题很明显:步骤3中的更改未使其成为标记.我们现在正在发布1.0.0而没有改变它.

问题是:我们如何解决这个问题?Maven的发布回滚功能本身是否已损坏?

maven-2 maven-3 maven-scm maven maven-release-plugin

3
推荐指数
1
解决办法
4204
查看次数