Статьи

Упрощение процесса p2. Часть 4. Использование p2.inf для добавления / удаления сайтов обновлений.

В первой части этой серии статей я рассмотрел использование составных репозиториев, чтобы обеспечить способ объединения сайтов обновлений в один URL-адрес для простоты использования и единой точки входа, с которой можно выполнять обновления.

Во второй части я рассказал о том, почему мы перешли от использования набора SDK, для создания которого — используя устаревший метод «просто распаковать в корневую папку затмений» или «dropin» — на единый сайт обновления целевой платформы, чтобы упростить обслуживание и предоставить многократно используемый артефакт для обеспечения как сборки, так и рабочего пространства.

В третьей части я рассмотрел идею связать ваше репо с его исходными сайтами требований, чтобы конечным пользователям нужно было использовать только один URL, а не полдюжины.


Наконец, давайте посмотрим, как вы можете использовать файл p2.inf для удаления сайтов, которые вы не поддерживаете, и добавления сайтов, которые вы делаете.

В JBDS 4 мы включили только два сайта обновлений — один для основных функций и один для сертифицированных сторонних дополнений, так что пользователи будут получать только официальные обновления от нас, а не от Spring, Eclipse или где-либо еще. Конечно, они могут вручную добавить другие страницы себя, но это немного похоже стаскивать «не удалить этот тег» тег на матрасе или удаления «гарантия аннулируется , если удалить» наклейки на вашем ноутбуке.

Итак, во-первых, мы удаляем все URL сайта обновления и сайта обнаружения из файлов feature.xml наших дополнительных функций, чтобы они не попали в продукт.

Далее мы используем файл p2.inf:

# To explicitly remove a site, use instructions.unconfigure
instructions.configure=\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:https${#58}//www.your.server.com/,name:Core Product Updates);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:1,location:https${#58}//www.your.server.com/,name:Core Product Updates);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:0,location:https${#58}//www.your.server.com/extras/,name:Extra Product Updates);\
org.eclipse.equinox.p2.touchpoint.eclipse.addRepository(type:1,location:https${#58}//www.your.server.com/extras/,name:Extra Product Updates);\

Затем, чтобы сгенерировать сайт с помощью этой инструкции p2.inf, вот немного кода Ant:

<echo>Run p2.publisher.UpdateSitePublisher using launcherjar = @{launcherjar}</echo>
<java jar="@{launcherjar}"
fork="true" timeout="10800000" jvm="${java.home}/bin/java" failonerror="true"
maxmemory="256m" taskname="p2"
>
<classpath>
<fileset dir="${builder.build.path}/plugins"
includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
/>
<fileset dir="${clean.eclipse.home}/plugins"
includes="org.eclipse.equinox.launcher_*.jar, org.eclipse.equinox.p2.publisher_*.jar, org.eclipse.equinox.p2.updatesite_*.jar"
/>
<pathelement location="${builder.build.path}/plugins" />
<pathelement location="${clean.eclipse.home}/plugins" />
</classpath>
<arg line=" org.eclipse.equinox.launcher.Main -consolelog -application org.eclipse.equinox.p2.publisher.UpdateSitePublisher"
/>
<arg line=" -metadataRepository file:${updateSiteJarDir}/ -metadataRepositoryName "${update.site.product.name} ${update.site.description} Update Site""
/>
<arg line=" -artifactRepository file:${updateSiteJarDir}/ -artifactRepositoryName "${update.site.product.name} ${update.site.description} Artifacts""
/>
<arg line=" -source ${updateSiteJarDir}/" />
<arg line=" -compress -publishArtifacts -reusePack200Files -configs *,*,*" />
</java>

Или поместите файл p2.inf в тот же каталог, что и ваши build.properties …

product=${builderDirectory}/jbds-all.product
runPackager=true

p2.gathering=true
p2.category.site=file:${builderDirectory}/site.xml
# locations. Don't need a baseLocation, the transformedRepoLocation will have what we need
buildDirectory=${product.build.directory}/jbds-all-package
transformedRepoLocation=${product.build.directory}/jbds-all-package/transformed
repoBaseLocation=${product.build.directory}/jbds-all-package/toTransform

# The prefix that will be used in the generated archive.
archivePrefix=studio

# The location underwhich all of the build output will be collected.
collectingFolder=${archivePrefix}

# The list of {os, ws, arch} configurations to build.
configs = linux,gtk,x86 & win32,win32,x86 & linux,gtk,x86_64 & macosx,cocoa,x86 & macosx,cocoa,x86_64

buildId=${product.name}-product-${versionTag}
buildLabel=${buildId}

skipBase=true
skipMaps=true
skipFetch=true

… и ваш файл .product …

 

<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>

<product name="JBoss Developer Studio for Web and SOA Development" uid="com.jboss.jbds.all" id="com.jboss.jbds.product.product" application="org.eclipse.ui.ide.workbench" version="4.0.0.qualifier" useFeatures="true" includeLaunchers="true">

<configIni use="default">
</configIni>

<launcherArgs>
<programArgs>--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile</programArgs>
<vmArgs>-Xms512m
-Xmx1024m
-Dosgi.bundles=reference:file:org.eclipse.equinox.simpleconfigurator_1.0.200.v20100503.jar@1:start
[email protected]/workspace</vmArgs>
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
-Xdock:icon=../Resources/JBDevStudio.icns</vmArgsMac>
</launcherArgs>

<windowImages/>

<splash
location="com.jboss.jbds.product" />
<launcher name="jbdevstudio">
<solaris/>
<win useIco="true">
<ico path="jbds.ico"/>
<bmp/>
</win>
</launcher>

<vm>
</vm>

<plugins>
</plugins>

<features>
<feature id="com.jboss.jbds.product.feature" version="4.0.0.qualifier"/>
</features>


</product>

… и при создании продукта с использованием PDE этот файл и его инструкции должны быть прочитаны в правильное время.

Надеюсь, эта серия была полезна! Если у вас есть примеры того, что вы сделали с файлами .product или p2.inf, пожалуйста, не стесняйтесь присылать мне ссылку на ваше сообщение или файл в вашем cvs, svn или git repo. Я хотел бы посмотреть, что еще вы можете сделать с p2 и сборками продукта.

Смотрите также:

 

С http://divby0.blogspot.com/2011/02/simplifying-p2-process-part-4-using.html