我在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中为每个子模块提供版本,并且不能从普通父模块继承。
提前致谢。
答案 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)...你应该总是为父模块提供版本。要更新所有模块的所有版本(父级+子级),您可以使用relativePath
或maven-version-plugin
。