Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要控制多个项目的Maven版本号_Maven_Versioning_Release Management - Fatal编程技术网

需要控制多个项目的Maven版本号

需要控制多个项目的Maven版本号,maven,versioning,release-management,Maven,Versioning,Release Management,说来话长。我现在的位置使用Ant进行构建。它们创建了20个不同的基础类罐,用于多个项目。最初,项目会检入他们需要的各种jar的特定版本,然后再也不会更新它们。这意味着每个应用程序都有与其他项目和服务器不兼容的JAR。接着是欢闹 为了处理这个问题,我立即引入了一个Maven存储库,并将Ivy集成到我们的Ant构建中。不再检查罐子。相反,您可以从Maven存储库获取正确的版本。最初,我希望开发人员将ivy.xml中的版本号保持最新,但他们从来没有这样做。相反,Ivy集成和设置依赖于外部Subvers

说来话长。我现在的位置使用Ant进行构建。它们创建了20个不同的基础类罐,用于多个项目。最初,项目会检入他们需要的各种jar的特定版本,然后再也不会更新它们。这意味着每个应用程序都有与其他项目和服务器不兼容的JAR。接着是欢闹

为了处理这个问题,我立即引入了一个Maven存储库,并将Ivy集成到我们的Ant构建中。不再检查罐子。相反,您可以从Maven存储库获取正确的版本。最初,我希望开发人员将
ivy.xml
中的版本号保持最新,但他们从来没有这样做。相反,Ivy集成和设置依赖于外部Subversion项目。这使我能够集成Ivy,对旧的
build.xml
文件进行最小的更改。我将
ivy.version.properties
文件添加到外部ivy项目中,并在其中维护各种jar的版本号。有一个公司范围的版本号

不同的项目使用<代码> ${Copy.Value}属性为我们的基础JAR版本号。当我更新<代码>常春藤.Value.Stase文件时,所有项目都会为我们的基础类使用正确的版本号进行更新。我们使用

为项目生成
pom.xml
,并使用它将JAR和WAR部署到Maven存储库中

结果是:我不再需要担心开发人员保持项目的版本号同步。一、 发布工程师通过更新这个
ivy.version.properties
文件来处理这个问题。所有项目都是同步的


现在,我们要转到Maven,我希望能够做同样的事情。我怀疑开发人员是否会记得用正确的版本号更新他们的
pom.xml
,所以我想从另一个文件中读取并使用它

有两个问题:一个是Maven在执行任何目标之前首先读取项目的版本号。
pom.xml
中没有版本号,生成的jar没有版本号

即使我设法通过第一步,我们也有一个事实,即POM.XML在基础类中没有版本号。当Maven下拉

pom.xml
以获取依赖项时,它无法确定是哪个版本

是的,我可以把它放到公司的
pom.xml
中,并将其作为所有其他项目的父项目。我们已经有了一个父项目来帮助设置所有项目的各个方面。我可以在里面放置一个基础类版本号。然而,这意味着开发人员现在必须在每次发布时更新父项目的版本号。如果不能信任开发人员在每个版本中更新其项目的版本号,那么您认为他们会在每个版本中使用父版本更新项目的版本号吗

我知道其他人肯定也遇到过类似的问题。你是怎么处理的

我可以用一个Ant脚本从模板
pom.xml
生成
pom.xml
,但这似乎有点愚蠢

我想知道Maven是否可以动态生成
pom.xml
,然后使用它继续执行正确的目标。例如,我输入
mvn包
,Maven将获取一个
template.pom.xml
文件,填写缺少的版本号以生成一个
generated.pom.xml
文件,然后对生成的pom执行
mvn包


或者,有没有更好的办法来解决这个问题?基本上,我需要控制所有项目的版本号。这样,所有项目都使用了我们的基础类的相同版本。此外,我还以这种方式控制其他JAR的一些其他版本(如log4j)。我已经用Ant和Ivy完成了这项工作,现在我想转到Maven。

我认为最好的选择是创建一个pom.xml,其中包含its中包的所有依赖项,然后使用import将其导入到开发人员项目paren pom.xml中

因此,在项目父POM中:

<properties>
  <corporate.version>...</corporate.version>
<properties>
...
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.mycompany.libs</groupId>
      <artifactId>foundation<artifactId>
      <version>${corporate.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
  </dependencies>
</dependencyManagement>

...
...
com.mycompany.libs

我认为最好的选择是创建一个pom.xml,其中包含its中包的所有依赖项,然后使用import将其导入到开发人员项目paren pom.xml中

因此,在项目父POM中:

<properties>
  <corporate.version>...</corporate.version>
<properties>
...
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.mycompany.libs</groupId>
      <artifactId>foundation<artifactId>
      <version>${corporate.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    ...
  </dependencies>
</dependencyManagement>

...
...
com.mycompany.libs

我们实际上也有同样的问题,我知道在“懒惰的程序员”之间没有折衷,他们从不更新他们的POMS和稳定性方面:改变基础罐的版本“突然”,这可能会导致意想不到的生成失败。
如果您确实想要您描述的行为,我会将所需的依赖项放入快照pom中,并将其用作父pom或导入为BOM。这样,你就可以改变内容,每个人都会在下一次更新中拉进新内容。

我们实际上也有同样的问题,我知道“懒惰程序员”永远不会更新他们的POMS和稳定方面:“突然改变”基础罐的版本。这可能会导致意外的生成失败


如果您确实想要您描述的行为,我会将所需的依赖项放入快照pom中,并将其用作父pom或导入为BOM。通过这种方式,您可以更改内容,每个人都可以在下次更新时加入新内容。

我认为这是一个愚蠢的想法,不应该这样做。开发人员有责任更新他们自己该死的POM,并确保他们使用的是正确的版本。这是它真正应该采用的方式,开发人员只需学习如何使用正确的方式(技术术语是什么?…哦,是的)