命令行拉起build Eclipse 插件
Eclipse的插件打包采用了Eclipse PDE提供的build能力。
The Plug-in Development Environment (PDE) provides tools to create, develop, test, debug, build and deploy Eclipse plug-ins, fragments, features, update sites and RCP product
Build - Ant based tools and scripts to automate build processes
更详细的帮助文档参见Eclipse提供的Plug-in Development Environment Guide.
对于Build主要参见Tasks/PDE Build目录
有三个步骤,是准备build环境,build feature和安装插件且集成产品包。
准备Build环境
参见Automated Building of RCP applications from a product configuration file.
文档中写到,准备的build环境要是如下目录结构。
<buildDirectory>/
plugins/
pluginToBuildA
pluginToBuildB
myProduct.product
...
features/
featureToBuild
...
<buildConfiguration>/
我将我本地建好的一个目录结构截图如下,注意,plugins和features的结构必须是这样的层次和结构,不能变动.
将你要build的features和plugins拷贝至相应的目录。
将Eclipse/IDE plugins目录的PDE build插件提供headless模板中的build.properties文件拷贝至buildConfiguration目录。
build.properties模板文件所在路径类似于:
eclipse/plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/templates/headless-build
Build feature
参见Eclipse帮助的Automated Building of Features目录
这个分成两步
- 修改步骤1中拷贝至buildConfiguration目录的build.properties文件
buildDirectory = buildDirectory
# 這個路徑是 *Target Platform* 的 eclipse home,
# 內有現成的 plugins 與 fetures 兩個 directory
baseLocation = target_pathform/eclipse
# 這些步驟我們沒有做,所以要 skip
skipBase=true
skipFetch=true
# 若果是 true 的話,閣下 feature 內的 feature.xml 所提到
# Target Platform 的所有 plugins 與 features 都會被複製出來
runPackager=true
# PDE 完事後,就會在 buildDirectory 建立這個 folder,
# 將結果放進去
buildLabel = build_result
# 最後製成品的名稱是 ${feature name}-${buildId}.zip
buildId=20100523
# Java 版本
javacSource = 1.6
javacTarget = 1.6
logExtension=.log
javacDebugInfo=ture
javacFailOnError=true
javacVerbose=true
- 用命令行执行build feature的动作
下面是一个示例,你只需要讲相应的插件和路径更新成自己的。
java -jar /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -application org.eclipse.ant.core.antRunner -buildfile /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/scripts/build.xml -Dbuilder=/Users/mac/803.eclipse.build/configDirectory
执行完之后会有build是否成功的提示
//========Update on 2012-09-15============
1. 问题1
[javac] Compliance level '1.4' is incompatible with target level '1.6'. A compliance level '1.6' or better is required
[javac] Compilation failed. Compiler errors are available in /Users/mac/803.eclipse.build/buildDirectory/plugins/org.simon.core1/@dot.log
BUILD FAILED
/Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/scripts/build.xml:36: The following error occurred while executing this line:
这个问题一定要在build.properties文件中定义好这两个属性,书写不能有错误
javacSource = 1.6
javacTarget = 1.6
build feature
productBuild/productBuild.xml
java -jar /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -application org.eclipse.ant.core.antRunner -buildfile /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/scripts/productBuild/productBuild.xml -Dbuilder=/Users/mac/803.eclipse.build/configDirectory
java -jar /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -application org.eclipse.ant.core.antRunner -buildfile /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/scripts/build.xml -Dbuilder=/Users/mac/803.eclipse.build/configDirectory
<echo message="123==${user.dir}" />
<echo message="456==${builder}" />
main:
[echo] 123==/Users/mac/803.eclipse.build/buildDirectory/features
[echo] 456==/Users/mac/803.eclipse.build/configDirectory
mac-mini:eclipse mac$ grep "org.eclipse.ant.core.antRunner" * -R
Binary file plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/temp/org/eclipse/pde/internal/build/BuildApplication.class matches
mac-mini:eclipse mac$
-Xdebug -Xrunjdwp:transport=dt_socket,address=8500,server=y,suspend=n
java -Xdebug -Xrunjdwp:transport=dt_socket,address=8500,server=y,suspend=y –jar /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.equinox.launcher_1.2.0.v20110502.jar -application org.eclipse.ant.core.antRunner -buildfile /Users/mac/801.eclipse.dev/eclipse/plugins/org.eclipse.pde.build_3.7.0.v20111116-2009/scripts/build.xml -Dbuilder=/Users/mac/803.eclipse.build/configDirectory
protected void generateFeatures(List features) throws CoreException {
AssemblyInformation assemblageInformation = null;
BuildDirector generator = null;
if (product != null) {
String replacement = QualifierReplacer.replaceQualifierInVersion("1.0.0.qualifier", "", null, null); //$NON-NLS-1$ //$NON-NLS-2$
productQualifier = new Version(replacement).getQualifier();
}
确定插件和feature的版本
win + [ 向后返回代码
win + ] 向前返回
public static String replaceQualifierInVersion(String version, String id, String replaceTag, Properties newVersions) {
if (!AbstractScriptGenerator.getPropertyAsBoolean(IBuildPropertiesConstants.PROPERTY_PACKAGER_AS_NORMALIZER))
return version;
if (!version.endsWith(PROPERTY_QUALIFIER))
return version;
不是以qualifier 结尾的 即不会被替换版本
outputUpdateJars = true 控制是否将feature 打成jar包