Maven模块 - 如何在不相关的项目中将其用作外部库

时间:2015-04-28 09:05:07

标签: java maven maven-module

我在Maven中设置了一个模块化项目,其父项目包含多个子项目。

父{的pom.xml看起来如下 -

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company</groupId>
    <artifactId>parent-app</artifactId>
    <version>${parent-application.version}</version>
    <packaging>pom</packaging>

    <dependencies>...</dependencies>

    <properties>
        <parent-application.version>1.0</parent-application.version>
    </properties>

    <modules>
        <module>parent-model</module>
        <module>parent-masters</module>
        <module>parent-web</module>
    </modules>
</project>

子项目的pom.xml看起来如下 -

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.company</groupId>
        <artifactId>parent-app</artifactId>
        <version>${parent-application.version}</version>
    </parent>

    <packaging>jar</packaging>
    <artifactId>child-model</artifactId>

    <dependencies>...</dependencies>
</project>

现在,我需要在一个单独的不相关项目中使用其中一个子项目作为lib。新项目的pom如下所示。

<project ...>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company</groupId>
    <artifactId>unrelated-app</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>child-model</artifactId>
            <version>1.0</version>
        </dependency>
    </dependencies>
</project>

我一直收到以下错误 Illegal character in path at index 57: http://repo.maven.apache.org/maven2/com/company/parent-app/${parent-application.version}/parent-app-${parent-application.version}.pom

原因似乎是我从prent-app继承了子模型中的version属性。

有没有办法克服这个问题?或者我是否需要在相应的pom.xml中为每个子模块提供版本,并且不能从普通父模块继承。

提前致谢。

1 个答案:

答案 0 :(得分:0)

有一种方法可以使用void Main() { int test = 21; var allAnimals = (Animal[]) Enum.GetValues(typeof(Animal)); var ordered = allAnimals.OrderByDescending(x => x); var animals = ordered.Aggregate(new List<Animal>(), (agg, ani) => { if (test > 0) { int number = (int)(test / (int)ani); agg.AddRange(Enumerable.Repeat(ani, number)); test -= number * (int)ani; } return agg; }); Console.WriteLine(string.Join(", ", animals.Select(a=>a.ToString()))); } [Flags] public enum Animal { Cow = 1, Duck = 2, Goose = 4 } 来克服这个问题,但我不推荐它(看一下这个answer)...你应该总是为父模块提供版本。要更新所有模块的所有版本(父级+子级),您可以使用relativePathmaven-version-plugin