Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 - Fatal编程技术网

Maven 将环境相关参数添加到生成中

Maven 将环境相关参数添加到生成中,maven,Maven,在我公司的父POM中,我指定了我们都使用的公司存储库。URL当然包含服务器名和路径。每次更改POM时,我都会发布一个新版本 现在想象一下,托管我们的repo的服务器被重命名。我可以更改父POM中的所有URL(这不是问题),并发布具有固定URL的新版本。但是我不能在父POM的现有版本中更改URL 这意味着,我不能从过去重建任何人工制品 有没有一些标准的方法来解决这个问题?比如: 中央属性文件 具有固定1.0.0-SNAPSHOT版本的配置POM,在发生任何更改时重新发布 如果您在父pom中使用存

在我公司的父POM中,我指定了我们都使用的公司存储库。URL当然包含服务器名和路径。每次更改POM时,我都会发布一个新版本

现在想象一下,托管我们的repo的服务器被重命名。我可以更改父POM中的所有URL(这不是问题),并发布具有固定URL的新版本。但是我不能在父POM的现有版本中更改URL

这意味着,我不能从过去重建任何人工制品

有没有一些标准的方法来解决这个问题?比如:

  • 中央属性文件
  • 具有固定1.0.0-SNAPSHOT版本的配置POM,在发生任何更改时重新发布

如果您在父pom中使用存储库,并且可能会随着时间的推移而改变,那么最好的策略是URL或它使用别名(DNS、Apache重定向、重写),尤其是不直接使用IP地址,并且您不必每次都更改存储库的地址

例如:

 <repositories>
        <repository>
          <id>myrepo</id>
          <url>http://myrepo.me/content/repositories/public/</url>
        </repository>
     </repositories>

如果您在父pom中使用存储库,并且可能会随着时间的推移而改变,那么最好的策略是URL或它使用别名(DNS、Apache重定向、重写),尤其是不直接使用IP地址,并且您不必每次都更改存储库的地址

例如:

 <repositories>
        <repository>
          <id>myrepo</id>
          <url>http://myrepo.me/content/repositories/public/</url>
        </repository>
     </repositories>

除了在POM中放置distMngt之外,您从不将存储库放置在POM中。再一次--从不。这在Maven中存在,因为当时不存在回购经理。这是多年来的坏习惯,应该取消

始终将Nexus实例与repo组一起使用。这将添加到您的
设置.xml
,它将镜像所有内容


对于那些不相信的人来说,我是一个漫长的Maven提交者。

除了在你的POM中添加distMngt之外,从不将存储库添加到POM中。再一次--从不。这在Maven中存在,因为当时不存在回购经理。这是多年来的坏习惯,应该取消

始终将Nexus实例与repo组一起使用。这将添加到您的
设置.xml
,它将镜像所有内容


对于那些不相信的人,我是一个多年的Maven提交者。

我们在工作中采用的另一种方法是用参数替换
中的URL,如下所示:

<distributionManagement>
  <repository>
    <id>my-repo</id>
    <name>My Release Repo</name>
    <url>${url.deploy.releases}</url>
  </repository>
  <snapshotRepository>
    <id>my-repo</id>
    <name>My Release Repo</name>
    <url>${url.deploy.snapshots}</url>
  </snapshotRepository>
</distributionManagement>

我的回购协议
我的解除回购
${url.deploy.releases}
我的回购协议
我的解除回购
${url.deploy.snapshots}
这样,我们使用
settings.xml
来控制工件应该部署在哪里。这样做的好处是,如果您迁移了存储库(我们已经迁移了),您只需要为新的构建/发布更新
settings.xml

如果您需要返回到早期版本并重新发布(无论出于何种原因),只需签出发布标签,设置
settings.xml
以指向新的repo并执行
mvn clean deploy

如果您不能修改
settings.xml
,您可以随时复制它,更改副本并指出带有
-s
标志的新设置文件


此方法也适用于
标记。

我们在工作中使用的另一种方法是使用参数替换
中的URL,如下所示:

<distributionManagement>
  <repository>
    <id>my-repo</id>
    <name>My Release Repo</name>
    <url>${url.deploy.releases}</url>
  </repository>
  <snapshotRepository>
    <id>my-repo</id>
    <name>My Release Repo</name>
    <url>${url.deploy.snapshots}</url>
  </snapshotRepository>
</distributionManagement>

我的回购协议
我的解除回购
${url.deploy.releases}
我的回购协议
我的解除回购
${url.deploy.snapshots}
这样,我们使用
settings.xml
来控制工件应该部署在哪里。这样做的好处是,如果您迁移了存储库(我们已经迁移了),您只需要为新的构建/发布更新
settings.xml

如果您需要返回到早期版本并重新发布(无论出于何种原因),只需签出发布标签,设置
settings.xml
以指向新的repo并执行
mvn clean deploy

如果您不能修改
settings.xml
,您可以随时复制它,更改副本并指出带有
-s
标志的新设置文件


这种方法也适用于
标签。

这不是最好的策略。该公司的DNS不合作:(我在这里看到的唯一方法是把别名放进所有开发人员的LPC中,但是这不是一个好的解决方案,IMHO。我认为我们不能触摸设置。XML.您不能更改您的主页中的SETIONCESS.XML文件<代码> ${home }/M2/Studio.XML<代码>?这不是最好的策略。公司的DNS不合作:(我在这里看到的唯一方法是把别名放进所有开发人员的LPC中,但是这不是一个好的解决方案,IMHO。我认为我们不能触摸设置。XML.您不能更改您的主页中的SETIONCESS.xml文件< ${home }/M2/Studio.XML/COD>?好,好,我相信您:但是这个怎么样:每个JBoss版本我都有一个存储库。每个项目都应该使用OLNY-one(对应于项目的JBoss版本)。此外,我希望避免在每次新jboss版本到来时更新所有开发人员的所有设置.xml。@BorisBrodski这是一种脑残的方法。repo可以承载任意多个版本。即使您采用我不推荐的方法,也请告诉您的Nexus管理员代理这些repo,并将这些代理添加到公共组中。您的开发人员甚至不会注意到这一点。它只会起作用。充其量,您可以在Nexus中为这些repo创建一个路由目标。使所有repo都可用于项目,很容易使用错误的版本。我想确保,项目只使用依赖项,这些依赖项稍后可通过JBoss获得。此外,添加新版本可能会破坏旧版本s、 如果使用了版本范围(如p2 repos中经常使用的版本范围),有什么想法吗?再次感谢!!我不理解你的方法!?更新某些版本意味着运行测试然后发布。没有其他方法使其可靠。你可以完全控制版本。使用错误的版本不是很容易的