gpt4 book ai didi

java - 使用 maven 从配置文件默认系统属性

转载 作者:行者123 更新时间:2023-12-02 10:52:45 26 4
gpt4 key购买 nike

我有一些从命令行指定的系统属性例如

mvn -Djdbc.url=... -Djdbc.user=... -Djdbc.password=... clean install

我不想从命令行显式指定每个值,而是希望有一个硬编码的 .properties 文件来默认这些值,但我仍然可以根据需要使用命令行覆盖它们。

我知道 properties-maven-plugin 是从文件读取属性的几种方法之一,但是如何读取属性并将它们应用到系统范围内?这些属性似乎仅在我的 pom.xml 中使用时才有效。如果我有其他一些配置文件(例如 Hibernate 配置文件),它似乎不起作用。

示例:

在我的 pom.xml 中,我有

    <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<!--
Alternatively this can read properties from a config file too
Hardcoded inline here for example purposes
-->
<property>
<jdbc.url>...</jdbc.url>
<jdbc.user>...</jdbc.user>
<jdbc.property>...</jdbc.property>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin>

现在我可以在 pom.xml 中的任何位置使用 jdbc.* 属性,甚至可以根据需要从命令行覆盖它们。

但是在我的 Hibernate 配置文件中我有

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="dialect">org.hibernate.dialect.PostgreSQL95Dialect</property>

<property name="connection.url">${jdbc.url}</property>
...
...
</session-factory>
</hibernate-configuration>

jdbc.url 和其他属性在此处显示为空白/空字符串,因为我从文件中读取的属性仅适用于我的 pom.xml。但是,如果我从命令行指定它,它就可以在这里工作,因为它适用于应用程序范围。

有没有一种好的方法可以读取属性并像从命令行一样在应用程序范围内应用它们?

谢谢!

最佳答案

你把事情搞混了;您引用的属性位于 properties-maven-plugin 内部,并且您正在对其进行配置,以便它可以读取文件的属性。

但这不是在 Maven 中使用“共享”属性的方法,它只是从文件中读取某些值的方法。

为了在 pom 外部可见,您必须将属性指定为“全局”,例如:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>*********</groupId>
<artifactId>******</artifactId>
<packaging>war</packaging>
<version>*****</version>
<name>****</name>

<properties>
<!-- Hibernate Configuration-->
<jdbc.url>...</jdbc.url>
<jdbc.user>...</jdbc.user>
<jdbc.property>...</jdbc.property>
</properties>

然后,您可以在 hibernate 配置中使用这些值:

<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="dialect">org.hibernate.dialect.PostgreSQL95Dialect</property>

<property name="connection.url">${jdbc.url}</property>
...
...
</session-factory>
</hibernate-configuration>

将全局属性设置到 pom 中的方法是让它们在 pom 外部可见的唯一方法。

我建议您将 hibernate 连接信息移到 pom 中,并最终创建更多配置文件,以便您可以在构建相应的包时编辑它们。

关于java - 使用 maven 从配置文件默认系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52030456/

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