Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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 如何从父pom.xml中的概要文件中提取属性数据?_Java_Maven - Fatal编程技术网

Java 如何从父pom.xml中的概要文件中提取属性数据?

Java 如何从父pom.xml中的概要文件中提取属性数据?,java,maven,Java,Maven,我有一个大型Java项目,项目的每个子部分都有一个子pom.xml。父pom有我想要的关键数据、用户名和密码。我的问题是如何从java程序中的父pom.xml中提取这些数据 父pom.xml在profile部分中有许多概要文件,其中的数据是我需要的。我发现了一个类似的例子,它简单地说是编码System.getProperty('property.name')当我尝试此操作时,代码只返回null。我想这是因为我从target目录运行代码,而不是通过Maven运行,但我可能完全错了 有人知道我错过了

我有一个大型Java项目,项目的每个子部分都有一个子pom.xml。父pom有我想要的关键数据、用户名和密码。我的问题是如何从java程序中的父pom.xml中提取这些数据

父pom.xml在profile部分中有许多概要文件,其中的数据是我需要的。我发现了一个类似的例子,它简单地说是编码
System.getProperty('property.name')当我尝试此操作时,代码只返回null。我想这是因为我从
target
目录运行代码,而不是通过Maven运行,但我可能完全错了

有人知道我错过了什么吗

在这方面,

Maven是一个构建工具(以及更多)。您的程序不知道它的存在。您可能提到的示例使用了maven和您的代码都可以使用的一些系统属性。 您可以参考maven中的系统属性。这很容易

可以从System.getProperty()检索的任何属性 方法可以作为Maven属性引用


我的答案显然与@grid建议的答案相反。虽然Maven是一个构建工具,但它也是一个非常好的工具,当您深入思考它时,它可以提供任何功能

曾经有一段时间,我需要钩住一个自定义属性文件,让Maven用项目属性对其进行过滤,然后在源代码中将该文件内容作为一个输入读取

现在,我想这一部分已经结束了,因为所有的负担都由cutom完成了,它有一个cutom目标“设置系统属性”,可以使项目属性(Maven使用的那些,被称为构建时属性)作为运行时属性,更准确地说,作为系统属性

您可以在构建部分中添加一个自定义插件配置片段,即子项目中的片段,其外观可能如下所示:


org.codehaus.mojo
属性maven插件
1.0-α-2
设置系统属性
property.name
${project.version}
尽管可以为属性设置任何值,但请注意占位符
${…}
的用法,以便在插入项目描述符时Maven解析属性。您可以通过这种方式引用任何属性,然后按照您在主要帖子中的建议在运行时使其可用:

package com.github.tmarwen.stackoverflow.maven.properties.showcase;
公用干管{
公共静态void main(字符串…参数){
字符串值=System.getProperty(“property.name”);
系统输出打印(值);
}
}

感谢您提供的信息@grid.:)这帮助了一些人,但我仍然完全不知道如何从父pom.xml中提取数据:/如果我明白了,您尝试做的是从代码中访问pom变量。这是不可能的,也是有原因的。maven变量用于为构建提供定制。建造完成后,它们就没有意义了。哦,不,不,不我得想点别的。感谢您提供了这些关键信息。虽然确实可以将maven属性提取为系统属性,但这并不意味着应该使用它们为应用程序提供信息。然后,可部署组件依赖于构建上下文。除非在构建之后始终在同一JVM中运行应用程序,否则这些属性在运行时将不存在。考虑一下运行CI构建然后部署到其他地方的情况。你的属性根本不存在。我绝对考虑过几乎所有的目标环境。尽管我的答案是没有资格成为生产目标,而是回答了用户的需求。