Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java maven版本自述中包含的更新版本_Java_Maven - Fatal编程技术网

Java maven版本自述中包含的更新版本

Java maven版本自述中包含的更新版本,java,maven,Java,Maven,我正在github上维护一个开源项目,该项目包含README.md文件以及包含项目当前版本1.0.0-SNAPSHOT的安装说明 向maven central发布新版本时,是否可以自动更新README.md中包含的此版本号 发布是用maven release plugin执行的,pom.xml中的版本更新得很好,但是我在文档中找不到任何东西可以正确更新这个外部文件 例如: README.md文件当前位于1.0.0-SNAPSHOT。它位于maven源代码/资源之外,但在git上进行管理。在mvn

我正在github上维护一个开源项目,该项目包含
README.md
文件以及包含项目当前版本
1.0.0-SNAPSHOT
的安装说明

向maven central发布新版本时,是否可以自动更新
README.md
中包含的此版本号

发布是用
maven release plugin
执行的,pom.xml中的版本更新得很好,但是我在文档中找不到任何东西可以正确更新这个外部文件

例如:

README.md
文件当前位于
1.0.0-SNAPSHOT
。它位于maven源代码/资源之外,但在git上进行管理。在
mvn发行版:prepare
,它应该更新到
1.0.0
,然后maven应该在标记新发行版之前提交/推送更改。然后,在
mvn发行版上:执行
它应该转到下一个开发版本
1.0.1-SNAPSHOT


()

您可以尝试编写一个bash脚本来构建项目并修改README.md文件。比如:

#!/bin/sh
VERSION=$1
mvn clean package
#modify the string manipulation command accordingly
sed -e "s/{VERSION}/${VERSION}/" ./README.md-tpl > ./README.md 

运行脚本时,可以将版本号作为第一个参数传递。您可以使用默认README.md-tpl文件的完整路径

您可以使用maven资源插件来实现评论中提到的类似功能

我没有尝试,但配置应该如下所示:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>3.0.1</version>
  <executions>
    <execution>
      <id>readme-md</id>
      <phase>process-resources</phase>
      <goals>
        <goal>copy-resources</goal>
      </goals>
      <configuration>
        <outputDirectory>${project.basedir}</outputDirectory>
        <resources>                                        
          <resource>
            <directory>${project.basedir}</directory>
            <includes>
              <include>README.md</include>
            </includes>
            <filtering>true</filtering>
          </resource>
        </resources>
        <encoding>UTF-8</encoding>
      </configuration>            
    </execution>
  </executions>
</plugin>

org.apache.maven.plugins
和

我们告诉插件从目录
${project.basedir}
复制资源,maven将其解析为根目录,再次复制到根目录,但只包含与
README.md
匹配的文件

筛选选项将所有占位符替换为变量,这些变量可以定义为pom.xml或命令行中定义的系统属性、项目属性、筛选资源。在本例中,我们使用项目属性版本


尽管这些评论是正确的,但如果发布出错,最终会出现不一致。在
mvn发布:perform
成功后,可以通过显式调用
mvn resources:resources
来克服这一问题。我希望这能有所帮助。

基于马尔文的答案,
您可以将README.md放在通常的位置,只包含一段文本

技巧在于,尽管标记不允许包含文本,但它允许包含svg图像,svg图像可以包含可在所有浏览器中选择和复制的文本:


svg{
字体系列:monospace;
字号:中等;
}
附属国
groupId${project.groupId}/groupId
artifactId${project.artifactId}/artifactId
版本${project.version}/version
/依赖性
这将呈现为:


${project.groupId}
${project.artifactId}
${project.version}
(粘贴时会变成一行,但没关系。pom.xml通常都是自动格式化的)

您将该图像放入名为“templates”的目录,并将副本放入“docimages”目录

现在,您可以使用普通图像引用将图像添加到README.md中:
![mvn依赖项](docimages/version.svg)

注意,您引用的是“docimages”目录中的一个,而不是“templates”目录中的一个

现在,您只需要在pom.xml中创建一个作业,用于复制和过滤图像的源代码:


org.apache.maven.plugins
maven资源插件
3.0.1
自述文件md
过程资源
复制资源
${project.basedir}/docimages
${project.basedir/templates}
version.svg
真的
UTF-8
“过滤所有自述的好处是什么?”您可能会问。

简单:README.md可以很大,并且可以包含所有类型的变量,作为您不想替换的文档的一部分。这将只替换SVG文件中的变量。

像这样吗?@Marged no,不要认为这是相同的。在我的例子中,
README.md
文件在maven源代码之外,但在git上管理。所以我希望release plugin用新版本更新它,然后在
mvn release:prepare
期间在git上标记新版本之前提交/推送更改。在
mvn发行版上:执行
,然后应该转到下一个开发版本,例如
1.0.1-SNAPSHOT
。这很棘手
README.md
是一个外部文件,不应位于最终JAR中。这意味着您需要在发布之前替换该令牌、提交更改、推送它并将文件回滚到该令牌。由于有两个步骤
准备
执行
,我甚至不确定您是否能有效地完成。如果您在之后进行
准备
清洁
该怎么办?然后,自述文件将被更改,除非您手动回滚。@Tunaki是的,我认为这是主要问题。另外,
release:perform
需要将所有更改推送到git上,因此在这个阶段将更改为
README.md
文件将破坏一切。。。除非更改立即推送到git上。如果现在什么都不存在,也许我可以尝试编写一个maven插件来执行这个任务?不使用令牌,只使用简单的字符串替换旧版本和新版本我认为这是一个概念上的问题。版本替换不是问题:您可以在发布之前执行一个目标,并使用
maven replacer plugin
替换令牌。但问题是要确保万一出现问题时不会有副作用。它也应该在windows上运行。我想保持这个“maven原生”,你可以开始使用Docker,它抽象了所有的环境问题并解决了