我必须Maven项目客户端和服务器。服务器的版本始终是客户端的版本。此“版本”不是客户端的Maven工件的版本。更多来自客户端的属性,我需要服务器中的属性。它是根据pom的属性和内部版本号或“ trunk-snapshot”(当客户端在开发人员计算机上进行构建时)创建的。
客户端版本是在构建时创建的(Jenkins构建或本地mvn全新安装)。我需要使用Java读取服务器模块上的客户端版本。
什么是最好的方法?
我试图创建一个文本文件作为客户端的构件,但找不到在服务器中读取文本文件的简便方法。
答案 0 :(得分:4)
最简单的解决方案是在父pom文件中定义一个属性,并在客户端和服务器模块中都引用该属性。
pom.xml
server/pom.xml
client/pom.xml
现在父pom.xml将在下面。
<properties>
<my.custom.version>1234</my.custom.version>
</properties>
在服务器和客户端pom.xml文件中,您可以按以下方式引用它。
<version-needed-tag>${my.custom.version}</version-needed-tag>
答案 1 :(得分:2)
在此处查看POM文档:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html。具体查看项目汇总:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Aggregation
您可能想要的是父POM,该父POM随后具有用于客户端的模块和用于服务器的模块。
您的项目结构如下:
./pom.xml <-- this is your parent pom, it has version info, module entries for client/server, and dependencies that are used by both the client and server
./server
./server/pom.xml <- this is the pom for your server
./client
./client/pom.xml <- this is the pom for your client
然后您可以在父pom中定义版本,然后客户端和服务器会继承它。要定义内部版本号,您可以使用lkamal建议之类的解决方案,方法是更改您的Maven版本属性。
要考虑的另一个选项是如何生成内部版本号。 Maven的Build Number Plugin可以生成任意顺序的内部版本号,也可以从SCM版本生成一个。
答案 2 :(得分:0)
我使用客户端中的properties-maven-plugin创建了一个属性文件来解决它,该文件最终将出现在client.jar中。我在服务器上使用ClassLoader.getSystemResourceAsStream(“ my.properties”)读取它。