有谁知道如何在Maven中读取x.properties文件.我知道有一些方法可以使用资源过滤来读取属性文件并从中设置值,但是我想在我的pom.xml中使用以下方法:
<properties file="x.properties">
</properties>
Run Code Online (Sandbox Code Playgroud)
有一些讨论: Maven外部属性
我有一个多模块项目,像这样:
main-project/
module1/
module2/
sub-module1/
sub-module2/
sub-module3/
...
module3/
module4/
...
Run Code Online (Sandbox Code Playgroud)
我需要在Maven2中定义一组属性(取决于我想要释放项目的环境).我不会使用<properties>因为有很多属性...因此,我使用Properties Maven2插件.
属性文件位于main-project/目录中.如何在主pom.xml中设置正确的目录,以便为任何子项指定在哪里找到属性文件?
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-1</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>???/env_${env}.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
如果我只设置<file>env_${env}.properties</file>,那么当Maven2编译第一个模块时,它将找不到该main-project/env_dev.properties文件.如果我设置<file>../env_${env}.properties</file>,那么将在父级别或任何子模块级别引发错误...
我正在编写一个maven插件,其参数是String [].
像这样:
/**
* @parameter expression="${args}"
*/
protected String[] args;
Run Code Online (Sandbox Code Playgroud)
这可以通过POM使用,如下所示:
<args>
<arg>arg1</arg>
<arg>arg2</arg>
<args>
Run Code Online (Sandbox Code Playgroud)
但我想从命令行发送它
-Dargs={arg1, arg2}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我正在使用BOM将其他项目中的依赖项导入到我的中,我需要一种方法来引用已在所述BOM中声明的依赖项版本.到目前为止,我已尝试将依赖项版本列为BOM中的属性,但此方法失败,因为属性未导入BOM.
我已经看到了Dependency Plugin的依赖:属性目标几乎完全符合我的需要,但是我没有给我一个完整的工件路径,而是需要将版本作为属性.有什么东西可以给我一个解决的工件的版本作为属性?
更新 - '为什么不使用父母pom?'
我经常发现自己在应用程序服务器环境中工作,其中提供的依赖项是使用BOM工件指定的(因为看起来这已成为分发相互关联的工件组的一种常见/标准方式,即widlfly).因此,我想将BOM视为事实的唯一来源.做类似的想法重新delcaring已经被在BOM中定义的依赖版本属性似乎不正确.
如果我要在父pom中定义镜像应用服务器环境的属性,我现在不得不担心保持父pom属性和BOM属性同步 - 为什么甚至在那时都有BOM?
这些信息已经在依赖树上提供了,这只是暴露它的问题......
我有一个多模块项目,我想定义一个将属性应用于所有子模块的过滤器文件.例如,我想有以下结构:
parent
- filter.properties
- module1
- resource1
- module2
- resource2
这样,当我构建父级时,它会在构建子模块时将过滤器应用于resource1和resource2.
如果我创建上面的结构并在父POM中定义过滤器,则构建失败,因为它期望在每个子模块中定义过滤器...是否有一种简单的方法可以忽略我?
我有一个属性文件,比如my-file.properties.除此之外,我的应用程序有几个配置文件,其中必须填写一些有关my-file.properties文件内容的信息.
my-file.properties:
application.version=1.0
application.build=42
user.name=foo
user.password=bar
Run Code Online (Sandbox Code Playgroud)
因此,在我的配置文件中,我会找到一些${application.version},${user.name}将替换为它们在属性文件中的值...
当我使用Maven2构建我的应用程序时,我只需要指定属性文件并说我的资源文件被过滤(如此问题的答案).但是,我需要通过仅使用Ant来实现相同的功能.
我已经看到Ant提供了一个过滤任务.但是,它迫使我在配置文件中使用模式@property.key@(即@user.name@代替#{user.name}),这在我的情况下是不可接受的.
我怎样才能解决我的问题?
我正在考虑重组一个大型Maven项目......
我们当前结构的基本概述:
build [MVN plugins, third party dependency management]:5.1
NRW Utils:6.0.0.0-beta12-SNAPSHOT
server-utils:6.0.0.0-beta12-SNAPSHOT
...
CMW Root:6.0.0.0-beta12-SNAPSHOT
cmw-webapp:6.0.0.0-beta12-SNAPSHOT
cmw-core [dependencies on NRW Utils]:6.0.0.0-beta12-SNAPSHOT
...
NRW Root :6.0.0.0-beta12-SNAPSHOT
nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-beta12-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)
改变的原因:
每个集合模块(即NRW Utils,CMW Root和NRW Root)的大小越来越大,构建过程开始耗费无法忍受的时间(有时约为4小时).
新计划:
build [MVN plugins, third party dependency management]:5.1
NRW Utils:6.0.0.0-NU-beta4-SNAPSHOT
server-utils:6.0.0.0-NU-beta4-SNAPSHOT
...
CMW Root:6.0.0.0-CMW-beta12-SNAPSHOT
cmw-webapp:6.0.0.0-CMW-beta12-SNAPSHOT
cmw-core [dependencies on NRW Utils]:6.0.0.0-CMW-beta12-SNAPSHOT
...
NRW Root :6.0.0.0-NRW-beta9-SNAPSHOT
nrw-webapp [depends on NRW Utils & CMW Root modules]:6.0.0.0-NRW-beta9-SNAPSHOT
...
Run Code Online (Sandbox Code Playgroud)
我们已经开始在版本中引入"键"以区分不同的"集体模块",因此可以轻松执行步进版本.此外,我们的实用程序模块更稳定,因此我们可能不需要几乎同样多的beta版本 - 现在没有限制保持beta数同步.
值得注意的是,实际上有5个不同的"集体模块"(不仅仅是3个)都是用不同的版本构建的(以独特的键区分),这就是为什么我认为拥有一个集中的地方是很好的版本,而不是5个不同POM中的重复属性.
现在的问题在于在定义不同版本的不同"集合模块"中的模块的依赖关系时POM文件的内容.
建议的依赖版本管理解决方案: …
我正在寻找一种方法来创建只在Maven中激活子配置文件的元配置文件.我们来看一个非常具体的例子.我有以下个人资料:
要构建项目,您必须为服务器选择一个配置文件,为数据库选择一个配置文件.我想创建两个"元配置文件":
第一个想法是通过属性激活子配置文件:
<profile>
<id>database-oracle</id>
<activation>
<property>
<name>prod</name>
</property>
</activation>
</profile>
Run Code Online (Sandbox Code Playgroud)
但是这样,我无法在元配置文件之间共享子配置文件.例如,我希望我的配置文件"database-oracle"由"pre-prod"和"prod"元配置文件激活.
注意:我的子配置文件只包含属性.它们用于过滤资源和子poms.这就是为什么我认为可以解决这种特殊情况的原因.
对我来说理想的情况是将它们外部化在外部属性文件中,但一次只有一个问题;)
使用maven1,我使用extend标签告诉我的孩子项目使用他们的父配置.
在父项中声明的所有依赖项都可用于扩展(子项)项目.
现在使用maven2我正在使用继承/组合功能,我必须在每个子项目中重新声明我的依赖项(减去版本号).(参见how-to-share-common-properties-among-maven-projects)
有没有办法告诉maven我想在所有孩子中分享我的一些依赖?
maven-2 ×8
java ×2
maven ×2
ant ×1
arguments ×1
build ×1
command-line ×1
dependencies ×1
filter ×1
maven-3 ×1
maven-bom ×1
maven-plugin ×1
profile ×1
properties ×1