在 ServiceMix 6.0.X / Karaf 3.0.X 中始终从远程仓库更新包或禁用本地仓库
Always update bundles from remote repo or disable local repo in ServiceMix 6.0.X / Karaf 3.0.X
我在测试环境中从远程仓库更新包时遇到问题。环境包括几个带有 ServiceMix(或 Karaf,无论如何)的服务器和带有 JFrog Artifactory 的服务器。
在 karaf 3.0.X
之前,我们使用 SNAPSHOT 版本在工作的 OSGi 容器上动态更新包,但现在 karaf 在本地存储库中搜索包,如果存在则从不检查远程存储库(artifactory)上的最新版本。我该如何解决?
karaf 和 maven 的配置示例(M2_HOME
已为用户设置)
settings.xml ($M2_HOME/conf/settings.xml
)
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups/>
<proxies/>
<servers/>
<mirrors/>
<profiles>
<profile>
<id>default-repo-settings</id>
<activation>
<activeByDefault/>
</activation>
<repositories>
<repository>
<id>artifactory</id>
<url>http://artifactory/ext-snapshot-local</url>
<snapshots>
<updatePolicy>always</updatePolicy>
</snapshots>
<releases>
<updatePolicy>always</updatePolicy>
</releases>
</repository>
<!-- same repos here -->
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>default-repo-settings</activeProfile>
</activeProfiles>
</settings>
org.ops4j.pax.url.mvn.cfg ($KARAF_HOME/etc/org.ops4j.pax.url.mvn.cfg
)
org.ops4j.pax.url.mvn.useFallbackRepositories=false
org.ops4j.pax.url.mvn.disableAether=true
org.ops4j.pax.url.mvn.useLocalRepositoryAsRemote=true
org.ops4j.pax.url.mvn.globalUpdatePolicy=always
org.ops4j.pax.url.mvn.defaultRepositories=file:${karaf.home}}/${karaf.default.repository}}@snapshots@id=karaf.${karaf.default.repository}}
org.ops4j.pax.url.mvn.repositories= \
http://artifactory/ext-snapshot-local@snapshots@id=artifactory, \
http://repo1.maven.org/maven2@id=central, \
http://repository.springsource.com/maven/bundles/release@id=spring.ebr.release, \
http://repository.springsource.com/maven/bundles/external@id=spring.ebr.external, \
http://zodiac.springsource.com/maven/bundles/release@id=gemini, \
http://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases, \
https://oss.sonatype.org/content/repositories/snapshots@id=sonatype.snapshots.deploy@snapshots@noreleases, \
https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j.sonatype.snapshots.deploy@snapshots@noreleases
最好简化您的工件提升方法,让一个且只有一个位置将工件放入 SMX/Karaf 容器。我建议设置您的 Artifactory,以便您拥有一个虚拟存储库,将您的内部存储库与远程存储库(Maven Central、Spring 等)合并。您的容器应仅指向您的内部 Artifactory 实例。这也允许您的 Artifactory 缓存远程存储库,并且您不再依赖于互联网和远程 Maven 存储库的启动。
现在,只要您执行 'update $bundleId',它就会查询虚拟存储库,Artifactory 会向您展示 -SNAPSHOT 工件的最佳可用匹配项。
此外,从本地文件中删除@snapshots 可能是个好主意:repo 行有助于避免混淆。
我在测试环境中从远程仓库更新包时遇到问题。环境包括几个带有 ServiceMix(或 Karaf,无论如何)的服务器和带有 JFrog Artifactory 的服务器。
在 karaf 3.0.X
之前,我们使用 SNAPSHOT 版本在工作的 OSGi 容器上动态更新包,但现在 karaf 在本地存储库中搜索包,如果存在则从不检查远程存储库(artifactory)上的最新版本。我该如何解决?
karaf 和 maven 的配置示例(M2_HOME
已为用户设置)
settings.xml ($M2_HOME/conf/settings.xml
)
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups/>
<proxies/>
<servers/>
<mirrors/>
<profiles>
<profile>
<id>default-repo-settings</id>
<activation>
<activeByDefault/>
</activation>
<repositories>
<repository>
<id>artifactory</id>
<url>http://artifactory/ext-snapshot-local</url>
<snapshots>
<updatePolicy>always</updatePolicy>
</snapshots>
<releases>
<updatePolicy>always</updatePolicy>
</releases>
</repository>
<!-- same repos here -->
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>default-repo-settings</activeProfile>
</activeProfiles>
</settings>
org.ops4j.pax.url.mvn.cfg ($KARAF_HOME/etc/org.ops4j.pax.url.mvn.cfg
)
org.ops4j.pax.url.mvn.useFallbackRepositories=false
org.ops4j.pax.url.mvn.disableAether=true
org.ops4j.pax.url.mvn.useLocalRepositoryAsRemote=true
org.ops4j.pax.url.mvn.globalUpdatePolicy=always
org.ops4j.pax.url.mvn.defaultRepositories=file:${karaf.home}}/${karaf.default.repository}}@snapshots@id=karaf.${karaf.default.repository}}
org.ops4j.pax.url.mvn.repositories= \
http://artifactory/ext-snapshot-local@snapshots@id=artifactory, \
http://repo1.maven.org/maven2@id=central, \
http://repository.springsource.com/maven/bundles/release@id=spring.ebr.release, \
http://repository.springsource.com/maven/bundles/external@id=spring.ebr.external, \
http://zodiac.springsource.com/maven/bundles/release@id=gemini, \
http://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases, \
https://oss.sonatype.org/content/repositories/snapshots@id=sonatype.snapshots.deploy@snapshots@noreleases, \
https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j.sonatype.snapshots.deploy@snapshots@noreleases
最好简化您的工件提升方法,让一个且只有一个位置将工件放入 SMX/Karaf 容器。我建议设置您的 Artifactory,以便您拥有一个虚拟存储库,将您的内部存储库与远程存储库(Maven Central、Spring 等)合并。您的容器应仅指向您的内部 Artifactory 实例。这也允许您的 Artifactory 缓存远程存储库,并且您不再依赖于互联网和远程 Maven 存储库的启动。
现在,只要您执行 'update $bundleId',它就会查询虚拟存储库,Artifactory 会向您展示 -SNAPSHOT 工件的最佳可用匹配项。
此外,从本地文件中删除@snapshots 可能是个好主意:repo 行有助于避免混淆。