使用Maven部署Oracle Service Bus:在一个目录中部署良好,但在另一个目录中部署失败

使用Maven部署Oracle Service Bus:在一个目录中部署良好,但在另一个目录中部署失败,oracle,maven,servicebus,osb,Oracle,Maven,Servicebus,Osb,我正在尝试为OSB(Oracle Service Bus)组合创建自动构建和部署。在构建服务器上设置Maven和OSB插件后,该系统由两个命令组成(通过命令提示符从POM所在的目录运行): mvn package mvn deploy -DoracleServerUrl=http://serverurl:port -DoraclUsername=username -DoraclePassword=password 此操作在生成系统中失败,但出现以下异常: The session cannot

我正在尝试为OSB(Oracle Service Bus)组合创建自动构建和部署。在构建服务器上设置Maven和OSB插件后,该系统由两个命令组成(通过命令提示符从POM所在的目录运行):

mvn package
mvn deploy -DoracleServerUrl=http://serverurl:port -DoraclUsername=username -DoraclePassword=password
此操作在生成系统中失败,但出现以下异常:

The session cannot be activated due to the existence of conflicts.
但我相信,在其核心,这是因为构建系统在构建阶段使用第一个命令创建包,然后在发布阶段使用第二个命令部署包

如果我直接获取代码并从目录1运行两个命令: D:\OSB组件\HelloWorldOSBService\HelloWorldOSBService 命令运行,组合部署良好

如果我将相同的代码从目录1复制到目录2,并从目录2运行相同的命令: D:\OSB组件\HelloWorldOSBService\HelloWorldOSBService2 第二个命令失败,与上面引用的相同异常

这也不是一次性的情况——我可以持续地重复几十次。从目录1运行命令总是成功,而从目录2运行命令总是失败,出现上述异常

是的,这是一个简单的默认HelloWorld组合-尽可能简单,没有对绝对路径的引用


Maven或OSB中是否有一个缓存“记住”最初部署复合材料的原始路径,或者有其他机制阻止从不同位置部署复合材料

如果您的
pom.xml
驻留在
/path/directory1/pom.xml
中,您的OSB项目将被部署为
directory1
——重新部署为directory2可能会导致您观察到的冲突。 如果需要从其他位置部署它,可以将其放置在
/path2/directory1/pom.xml

就您的示例而言,这应该是可行的: 将项目内容复制到与下面类似的路径,然后运行maven部署

D:\OSBComposites\HelloWorldOSBService2\HelloWorldOSBService

如果您的
pom.xml
驻留在
/path/directory1/pom.xml
中,您的OSB项目将作为
directory1
部署—重新部署为directory2可能会导致您观察到的冲突。 如果需要从其他位置部署它,可以将其放置在
/path2/directory1/pom.xml

就您的示例而言,这应该是可行的: 将项目内容复制到与下面类似的路径,然后运行maven部署

D:\OSBComposites\HelloWorldOSBService2\HelloWorldOSBService

就这样,谢谢你。对于任何试图将这些集成到TFS构建系统中的人来说,有几件事需要注意。源代码总是从名为“S”的目录编译而来。如果您的构建步骤涉及从构建本身部署到服务器(我不推荐这是一种糟糕的做法),那么您需要将工件放入具有所需名称的子文件夹中。发布是从与构建中发布工件步骤中的“工件名称”值匹配的目录执行的。在那里输入所需的目录名。maven世界中的“部署”意味着推送到工件存储库(例如nexus)。对于开发构建上的快照构建,这种情况经常发生。OSB运行时的“部署”发生在预集成测试步骤中,如果它在开发环境的快照构建上不断发生,并伴随着单元测试,则再次需要。对于“更高”的环境,您可以从工件存储库升级经过测试、版本控制、非快照的构建—您的CI服务器可以有单独的构建作业,用于“升级”到test/uat/live,谢谢。对于任何试图将这些集成到TFS构建系统中的人来说,有几件事需要注意。源代码总是从名为“S”的目录编译而来。如果您的构建步骤涉及从构建本身部署到服务器(我不推荐这是一种糟糕的做法),那么您需要将工件放入具有所需名称的子文件夹中。发布是从与构建中发布工件步骤中的“工件名称”值匹配的目录执行的。在那里输入所需的目录名。maven世界中的“部署”意味着推送到工件存储库(例如nexus)。对于开发构建上的快照构建,这种情况经常发生。OSB运行时的“部署”发生在预集成测试步骤中,如果它在开发环境的快照构建上不断发生,并伴随着单元测试,则再次需要。对于“更高”的环境,您可以从工件存储库升级经过测试、版本控制的非快照构建—您的CI服务器可以有单独的构建作业,用于“升级”到test/uat/live