gpt4 book ai didi

java - 在编译时将项目版本插入到scala代码中

转载 作者:行者123 更新时间:2023-12-02 04:03:54 24 4
gpt4 key购买 nike

我有混合 Java/Scala 项目,我使用 Maven 作为构建工具,并且我在 pom.xml 文件中提到了我的项目版本:

<parent>
<groupId>com</groupId>
<artifactId>stuff</artifactId>
<version>3.6.7.7-SNAPSHOT</version>
</parent>

<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>scala-compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>

我想在我的scala代码中使用项目版本(3.6.7.7-SNAPSHOT),这意味着我需要在编译过程中以某种方式注入(inject)它,有什么方法可以做到吗?

已经尝试使用 getProperty 函数 -

val properties = System.getProperties()
override def version: String = properties.get("parent.version")

但它返回 null。

编辑-我发现了类似的question用于 Java 代码。

我决定使用maven-replacer-plugin

            <plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>maven-replacer-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<file>.\src\main\resources\Installer.scala</file>
<outputFile>.\src\main\scala\com\Installer.scala</outputFile>
<replacements>
<replacement>
<token>@pomversion@</token>
<value>${project.version}</value>
</replacement>
</replacements>
</configuration>
</plugin>

但缺点是我必须在资源目录中创建一个新文件,有什么办法可以在编译后将类返回到其原始状态,即使编译失败?

已解决-我将正则表达式与 maven-replacer-plugin 一起使用,找到定义版本变量的行并使用 -

更改其值
            <plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>maven-replacer-plugin</artifactId>
<version>1.4.0</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<file>.\src\main\scala\com\Installer.scala</file>
<outputFile>.\src\main\scala\com\Installer.scala</outputFile>
<replacements>
<replacement>
<token>override def version: String = (.*)</token>
<value>override def version: String = "${project.version}"</value>
</replacement>
</replacements>
</configuration>
</plugin>

使用此方法,变量会根据正确的版本更改每个构建,而无需向项目添加新文件。

最佳答案

您可以使用 Maven 资源插件来完成此操作。

details.txt文件放在src/main/resources

details.txt内容

project.version=${project.version}

现在在 POM 中使用以下插件

<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}</outputDirectory>
<resources>
<resource>
<directory>${project.build.directory}/details.txt</directory>
<includes>
<include>version.txt</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>

这将使用project.version值写入details.txt。您还可以获得任何其他变量值。

现在,由于details.txt是您构建的一部分,因此阅读它的内容是微不足道的。

关于java - 在编译时将项目版本插入到scala代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34575002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com