之前我发布了一个关于如何从命令行更改Maven项目版本的问题,这引出了一个新问题.
以前我能够获得版本号,因为版本存储为易于grep并从命令行解析的属性(bash).现在pom.xml元素已用于此,它不再是唯一的,因为所有依赖项和其他一些也使用它.我认为没有办法使用bash脚本获取当前版本号,而无需外部工具来解析xml或一些非常上下文的sed命令.
我认为最干净的解决方案是让Maven分发这个版本信息.我正在考虑编写一个自定义maven插件来检索不同的属性,但我想我先问这里.
那么,有没有简单的方法来获得${project.version}命令行的价值?提前致谢.
解
感谢您的帮助.我不得不cd手动到目录,但这可以很容易地完成.在我的bash脚本中我有
version=`cd $project_loc && mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | sed -n -e '/^\[.*\]/ !{ /^[0-9]/ { p; q } }'`
Run Code Online (Sandbox Code Playgroud)
这给了我当前版本,然后我可以推进.Grepping可能更简单,但我认为我想尽可能健壮,所以我对以数字开头的第一行感到满意,并尝试将其作为版本号处理.
# Advances the last number of the given version string by one.
function advance_version () {
local v=$1
# Get the last number. First remove any suffixes (such as '-SNAPSHOT').
local cleaned=`echo $v | sed -e 's/[^0-9][^0-9]*$//'`
local last_num=`echo $cleaned | sed -e 's/[0-9]*\.//g'`
local next_num=$(($last_num+1))
# …Run Code Online (Sandbox Code Playgroud) 我试图以编程方式排列的一个实例的基线UITextField与实例UIButton.我目前正在以类似于此处描述的方式处理此计算,但是UITextField内容可能存在偏移.任何想法我如何才能获得文本位置UITextField甚至更好,是否有更简单的方法来对齐基线?
首先,我确实有一些理解,以下可能不是普遍接受的做事方式.
我们有一个Maven 2项目,其版本号应该在新版本中每周更新一次.在这个过程中,我试图消除所有必须记住的事情,并且我已经创建了一个以交互方式处理该过程的bash脚本.
但是,我的问题是从命令行更新pom版本.我可以用sed做到这一点,但我不认为这很方便.我想知道是否有任何maven插件可以直接从命令行修改pom.xml.该版本在pom的属性部分中设置.是否有可能编写一个可以改变属性的插件?
提前致谢.
更新
似乎我的问题是将项目版本定义为属性(在过滤时应用),现在看起来有点愚蠢.
我仍在寻找答案的一件事是如何将某个项目的版本可靠地提供给命令行.以前我有一个"非常独特"的属性,我使用grep,但现在<version>元素不是唯一的,因为在子项目中至少有两个.如果Maven没有解决方案,我需要某种XML解析器,但我的目标是使脚本尽可能独立.
我不确定我是否应该从中创建一个新问题,但我没有.获取版本与设置版本密切相关.
我对SBT比较陌生.我想在我的SBT配置中包含jooq-sbt-plugin(GitHub).我正在使用Build.scala来处理多个项目,我想在那里包含jooq-sbt-plugin配置,但我无法弄清楚它放在哪里.
import sbt._
import Keys._
object SampleBuild extends Build {
lazy val all = Project(id = "all", base = file("."), settings = defaultSettings) aggregate(
one, two
)
lazy val one = Project(
id = "one",
base = file("one"),
settings = defaultSettings ++ Seq(
libraryDependencies ++= Dependencies.one
)
)
lazy val two = Project(
id = "two",
base = file("two"),
settings = defaultSettings ++ Seq(
libraryDependencies ++= Dependencies.two
)
) dependsOn (one)
override lazy val settings = super.settings ++ …Run Code Online (Sandbox Code Playgroud) 我有一个更新依赖兄弟项目的依赖版本的问题.
我的简化项目设置如下.
root
|--parent
|--tool-core
|--tool
|--functional-tests
Run Code Online (Sandbox Code Playgroud)
父项目包含所有全局属性和依赖关系管理.功能测试取决于工具,工具取决于工具核心.pom.xml仅根聚合(指定是否包括功能测试),而父项目是所有项目的父项.我不知道这是否微不足道,但父级不包含在聚合中,因为它已经是每个子项目的父级.
现在,我的问题是如果我改变工具的版本versions:set.工具版本已更改,但对工具的任何依赖性均未更改.我该怎么做?我已经尝试了或多或少随机的其他目标,我确实尝试阅读手册.
我已经尝试使用该<dependencyManagement>部分并使用父级版本的属性,但这些不会更新到新版本.
任何帮助都非常感谢.
加成
我得到一条消息"Ignoring reactor dependency:com.tool:tool:jar:null:1.2.3".这是我尝试的时候versions:use-latest-releases.但是,versions:display-dependency-updates确实表明存在"本地依赖"的更新(功能测试取决于工具).
更新
似乎Maven会从存储库中查找新版本,包括本地的版本,现在我认为它很明显.但是,这意味着必须在更新依赖项之前构建并安装该工具到本地存储库.
我只是想知道这是否是将集成测试作为自己的项目的正确方法.我希望有一种方法可以立即更新版本.
更新
基本上我有以下设置.在该版本依赖functional-tests的tool是通过定义的parent项目.我省略了tool-core因为它可以作为一部分处理tool.
根:
<groupId>com.somecompany</groupId>
<artifactId>x-reactor</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<profiles>
<profile>
<id>cli</id>
<modules>
<module>tool</module>
</modules>
</profile>
<profile>
<id>deploy</id>
<modules>
<module>tool</module>
<module>functional-tests</module>
</modules>
</profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)
父:
<groupId>com.somecompany</groupId>
<artifactId>x-parent</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.somecompany</groupId>
<artifactId>tool</artifactId>
<version>3.2.3</version>
</dependency>
</dependencies>
</dependencyManagement>
Run Code Online (Sandbox Code Playgroud)
工具:
<parent>
<groupId>com.somecompany</groupId>
<artifactId>x-parent</artifactId>
<version>1.0</version>
<relativePath>../parent/pom.xml</relativePath> …Run Code Online (Sandbox Code Playgroud)