相关疑难解决方法(0)

如何在Maven中读取外部属性文件

有谁知道如何在Maven中读取x.properties文件.我知道有一些方法可以使用资源过滤来读取属性文件并从中设置值,但是我想在我的pom.xml中使用以下方法:

<properties file="x.properties"> 

</properties>
Run Code Online (Sandbox Code Playgroud)

有一些讨论: Maven外部属性

java maven-2 build properties-file

122
推荐指数
3
解决办法
17万
查看次数

Maven2属性,指示父目录

我有一个多模块项目,像这样:

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-2 properties

98
推荐指数
8
解决办法
14万
查看次数

字符串数组作为maven插件的命令行参数

我正在编写一个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)

这可能吗?

command-line maven-2 arguments maven-plugin

18
推荐指数
2
解决办法
1万
查看次数

Maven是否有办法将依赖版本作为属性?

我正在使用BOM将其他项目中的依赖项导入到我的中,我需要一种方法来引用已在所述BOM中声明的依赖项版本.到目前为止,我已尝试将依赖项版本列为BOM中的属性,但此方法失败,因为属性未导入BOM.

我已经看到了Dependency Plugin的依赖:属性目标几乎完全符合我的需要,但是我没有给我一个完整的工件路径,而是需要将版本作为属性.有什么东西可以给我一个解决的工件的版本作为属性?

更新 - '为什么不使用父母pom?'

我经常发现自己在应用程序服务器环境中工作,其中提供的依赖项是使用BOM工件指定的(因为看起来这已成为分发相互关联的工件组的一种常见/标准方式,即widlfly).因此,我想将BOM视为事实的唯一来源.做类似的想法重新delcaring已经被在BOM中定义的依赖版本属性似乎不正确.

如果我要在父pom中定义镜像应用服务器环境的属性,我现在不得不担心保持父pom属性和BOM属性同步 - 为什么甚至在那时都有BOM?

这些信息已经在依赖树上提供了,这只是暴露它的问题......

java maven maven-bom

11
推荐指数
2
解决办法
7333
查看次数

如何在Maven2模块之间共享过滤器文件?

我有一个多模块项目,我想定义一个将属性应用于所有子模块的过滤器文件.例如,我想有以下结构:

parent
- filter.properties
- module1
    - resource1
- module2
   - resource2

这样,当我构建父级时,它会在构建子模块时将过滤器应用于resource1和resource2.

如果我创建上面的结构并在父POM中定义过滤器,则构建失败,因为它期望在每个子模块中定义过滤器...是否有一种简单的方法可以忽略我?

maven-2

6
推荐指数
1
解决办法
3884
查看次数

使用Ant模拟Maven2过滤机制

我有一个属性文件,比如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}),这在我的情况下是不可接受的.

我怎样才能解决我的问题?

ant maven-2 filter

5
推荐指数
1
解决办法
4082
查看次数

关于大型项目版本控制和避免包含表达式的版本的Maven建议

我正在考虑重组一个大型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文件的内容.

建议的依赖版本管理解决方案: …

build-process maven-2 maven-3 maven

5
推荐指数
1
解决办法
2643
查看次数

Maven中的Meta配置文件

我正在寻找一种方法来创建只在Maven中激活子配置文件的元配置文件.我们来看一个非常具体的例子.我有以下个人资料:

  • "服务器JBoss的"
  • "服务器雄猫"
  • "数据库HSQL"
  • "数据库的Oracle"

要构建项目,您必须为服务器选择一个配置文件,为数据库选择一个配置文件.我想创建两个"元配置文件":

  • "dev"=>"server-tomcat","database-hsql"
  • "prod"=>"server-jboss","database-oracle"

第一个想法是通过属性激活子配置文件:

<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.这就是为什么我认为可以解决这种特殊情况的原因.

对我来说理想的情况是将它们外部化在外部属性文件中,但一次只有一个问题;)

profile maven-2

4
推荐指数
1
解决办法
918
查看次数

Maven2共享父节点和子节点之间的依赖关系(不重新声明子节点中的依赖关系)

使用maven1,我使用extend标签告诉我的孩子项目使用他们的父配置.

在父项中声明的所有依赖项都可用于扩展(子项)项目.

现在使用maven2我正在使用继承/组合功能,我必须在每个子项目中重新声明我的依赖项(减去版本号).(参见how-to-share-common-properties-among-maven-projects)

有没有办法告诉maven我想在所有孩子中分享我的一些依赖?

dependencies maven-2 dependency-management

4
推荐指数
1
解决办法
7917
查看次数