如何从企业-POM中读取属性?

时间:2016-05-19 10:07:20

标签: java maven

目前我有一个多模块maven项目,其中版本和插件在父级中定义并在模块中使用。

parent.pom中的示例依赖:

<properties>
  <junit.version>4.12</junit.version>
</properties>

<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>${junit.version}</version>
  <scope>test</scope>
</dependency>

并在模块中使用:

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>

这很好用,项目构建没有任何问题。现在,我想将一些版本和依赖项提取到独立 enterprise.pom中,以全局定义它们并在我的不同项目中使用它们。所以我创建了一个企业项目(类型POM):

<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>com.myurl</groupId>
  <artifactId>META-POM</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <properties>
    <junit.version>4.12</junit.version>   
  </properties>

  <dependencyManagement>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
  </dependencyManagement>    
</project>

然后我运行mvn clean install将它放入我的本地存储库,该工作正常 - 我可以在那里看到它

接下来,我更改了我的多模块项目,使用META-POM作为依赖项(了解META-POM中定义的版本)并删除了junit-property以及依赖项

<dependency>
  <groupId>com.myurl</groupId>
  <artifactId>META-POM</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</dependency>

当我现在尝试打包我的多模块项目时,它会失败,因为依赖项没有在META-POM中定义的属性。 即使我将模块中的依赖项更改为

<dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
  <version>${junit.version}</version>
    </dependency>

它仍然给我同样的错误for junit:jar must be a valid version but is '${junit.version}'.

如何从企业-POM派生版本属性?我想在一个地方定义它们,所以我确保我在任何地方使用相同的版本。

P.S。我希望在没有在enterprise-POM和所有多模块项目之间定义parent/module的情况下拥有一个独立的enterprise-POm

1 个答案:

答案 0 :(得分:1)

您需要在依赖项中添加if (ActivityCompat.checkSelfPermission((Activity)mContext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity)mContext, new String[]{ android.Manifest.permission.ACCESS_FINE_LOCATION }, 10); } 到META-POM。之后,您应该能够使用不带版本标记的junit。

我建议使用小写的artifactId。如果您有多个使用相同版本的依赖项,则META-POM中的属性才有意义。