我想生成一个zip文件,用maven更新应用程序.zip将托管在服务器上,我使用程序集插件生成zip.但是,我希望maven能够自动生成一个文本文件,该文件存储zip之外的当前版本号.这可能吗?
编辑:我成功地使用maven Assembly Plugin和两个描述符创建了两个自定义程序集.一个目录单一目标,它只是根据过滤创建一个带有更新版本.txt的文件夹.然后另一个具有单个目标的实际打包zip文件.这似乎非常不优雅,我想它不会正确地更新整个更新文件夹的maven repo.如果有更好的方法,请告诉我.
我已经创建了一个管道并使用嵌入式groovy管道脚本定义,似乎无法从POM获取项目的版本ID.我试过这个在groovy控制台中工作但在Jenkins构建管道脚本中:
def project = new XmlSlurper().parse(new File("pom.xml"))
def pomv = project.version.toString()
Run Code Online (Sandbox Code Playgroud)
根据詹金斯的文档$POM_VERSION,当我将它分配给变量并将其回显时,该值中没有任何内容.
def pomv = "$POM_VERSION"
Run Code Online (Sandbox Code Playgroud)
要么
def pomv = '$POM_VERSION"
Run Code Online (Sandbox Code Playgroud) 我想从命令行中检索groupId,artifactId和 Maven项目的版本.
本主题中提出的解决方案" 如何将Maven项目版本添加到bash命令行 "是使用以下插件:
mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.artifactId
它的工作原理很好,但我想不出如何设置,在同一时间内,project.groupId, project.artifactId & project.version到-Dexpression说法.
我会避免每次使用不同的-Dexpression参数启动3次Maven命令...
THKS
local pom_groupid=`mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.groupId |grep -Ev '(^\[|Download\w+:)'`
local pom_artifactid=`mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.artifactId |grep -Ev '(^\[|Download\w+:)'`
local pom_version=`mvn org.apache.maven.plugins:maven-help-plugin:2.2:evaluate -Dexpression=project.version |grep -Ev '(^\[|Download\w+:)'`
Run Code Online (Sandbox Code Playgroud) 我有一个依赖项,我已在Maven本地存储库中安装并在本地使用但在部署服务器上不可用.我使用该依赖项,Class.forName(...)因此如果从部署服务器上的类路径中遗漏它将没有问题.
有没有办法告诉Maven忽略依赖,如果它无法解决它?
我似乎没有<scope>或者<optional>可以解决这个问题,但<profiles>如果有任何方法可以根据依赖项可用性激活/停用配置文件,则可能会这样做.
首先,我确实有一些理解,以下可能不是普遍接受的做事方式.
我们有一个Maven 2项目,其版本号应该在新版本中每周更新一次.在这个过程中,我试图消除所有必须记住的事情,并且我已经创建了一个以交互方式处理该过程的bash脚本.
但是,我的问题是从命令行更新pom版本.我可以用sed做到这一点,但我不认为这很方便.我想知道是否有任何maven插件可以直接从命令行修改pom.xml.该版本在pom的属性部分中设置.是否有可能编写一个可以改变属性的插件?
提前致谢.
更新
似乎我的问题是将项目版本定义为属性(在过滤时应用),现在看起来有点愚蠢.
我仍在寻找答案的一件事是如何将某个项目的版本可靠地提供给命令行.以前我有一个"非常独特"的属性,我使用grep,但现在<version>元素不是唯一的,因为在子项目中至少有两个.如果Maven没有解决方案,我需要某种XML解析器,但我的目标是使脚本尽可能独立.
我不确定我是否应该从中创建一个新问题,但我没有.获取版本与设置版本密切相关.
我正在尝试从我的 pom.xml 文件中读取属性。我尝试了以下方法并且有效:
steps {
script {
def xmlfile = readFile "pom.xml"
def xml = new XmlSlurper().parseText(xmlfile)
def version = "${xml.version}"
echo version
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试做这样的事情时:
steps {
script {
def xmlfile = readFile "pom.xml"
def xml = new XmlSlurper().parseText(xmlfile)
def version = "${xml.version}"
def mystring = "blabhalbhab-${version}"
echo mystring
}
}
Run Code Online (Sandbox Code Playgroud)
管道突然失败并显示错误:
Caused: java.io.NotSerializableException: groovy.util.slurpersupport.NodeChild
Run Code Online (Sandbox Code Playgroud)
这里可能有什么问题?
编辑:只需为其他使用相同用例的人添加它。我的具体问题是关于如何使用 XmlSlurper() 避免 CPS 相关错误。但是对于任何其他试图解析 POM 的人来说,害怕那个据称会弃用的 PR,readMavenPom最安全最专业的方法可能是这样的:
def version = sh script: "mvn help:evaluate -f 'pom.xml' -Dexpression=project.version -q -DforceStdout", returnStdout: …Run Code Online (Sandbox Code Playgroud) 有没有办法获取 pom.xml 文件中定义的版本,以便它可以与 Bitbucket 管道中的变量一起使用?
StackOverflow 上也有类似的问题,但它们主要指的是 Jenkins 和“readMavenPom”,这在 Bitbucket 管道中似乎不可用。
我想用它作为第二步上传到S3的版本标签。
- step:
name: Build and Test
caches:
- maven
script:
- mvn package
artifacts:
- target/myapp-*.jar
- step:
name: Upload to S3
deployment: production
script:
- pipe: atlassian/aws-code-deploy:0.2.10
variables:
AWS_DEFAULT_REGION: $AWS_REGION
AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
COMMAND: 'upload'
APPLICATION_NAME: 'myapp'
ZIP_FILE: "target/myapp-*.jar"
S3_BUCKET: 'myapps'
VERSION_LABEL: "myapp-${version}-${BITBUCKET_COMMIT:0:8}"
Run Code Online (Sandbox Code Playgroud) 我有一个pom文件,其中包含以下信息:
<modelVersion>4.0.0</modelVersion>
<groupId>com.site.camera</groupId>
<artifactId>proj3</artifactId>
<packaging>pom</packaging>
<version>2.6</version>
<name>Proj 3</name>
Run Code Online (Sandbox Code Playgroud)
我正在编写一个bash脚本,并希望能够打开这个文件(pom.xml)并删除版本(例如在这种情况下为2.6).我这样做是因为当我更新版本时,我希望我的脚本的其余部分用它来更新.
我尝试过的事情:
var=$(grep <version>2.6</version> pom.xml)
echo $var
Run Code Online (Sandbox Code Playgroud)
请注意,我在pom文件中有多个版本参数.我需要这个特定的版本,包含这个名称,包装,artifactId等.
Linux 也回答了同样的问题 - How to get Maven project version to the bash command line
但是 Windows 呢?