tycho管理插件依赖架构

附件中是我总结的使用tycho管理Eclipse插件项目的架构图。
附有构建项目实例代码。
下面简要说明下项目架构
1.创建parent项目itp02-parent
其中pom.xml内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <prerequisites>
    <maven>3.0</maven>
  </prerequisites>
  
  <groupId>tycho.demo.itp02</groupId>
  <artifactId>itp02-parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>

  <properties>
    <tycho-version>0.20.0</tycho-version>
  </properties>

  <modules>
    <module>tycho.demo.itp02.bundle</module>
    <module>tycho.demo.itp02.bundle.tests</module>
    <module>tyco.demo.itp02.feature</module>
    <module> tyco.demo.itp02.p2Update</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>tycho.demo.itp02</groupId>
      <artifactId>pomfirst-bundle</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
    <dependency>
      <groupId>tycho.demo.itp02</groupId>
      <artifactId>pomfirst-thirdparty</artifactId>
      <version>1.0.0-SNAPSHOT</version>
    </dependency>
  </dependencies>

  <repositories>
   <repository>
     <id>helios</id>
     <layout>p2</layout>
     <url>http://download.eclipse.org/releases/helios</url>
   </repository>
  </repositories>

  <build>
    <plugins>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <!-- The Tycho Maven Plugin provides extensions to build Eclipse projects. -->
        <artifactId>tycho-maven-plugin</artifactId>
        <version>${tycho-version}</version>
        <extensions>true</extensions>
      </plugin>
      <plugin>
        <groupId>org.eclipse.tycho</groupId>
        <!-- Tycho Target Platform Configuration Plugin -->
        <artifactId>target-platform-configuration</artifactId>
        <version>${tycho-version}</version>
        <configuration>
          <pomDependencies>consider</pomDependencies>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>


2.我们创建普通的Eclipse 插件,名称tycho.demo.itp02.bundle
其pom.xml是这样定义的:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>tycho.demo.itp02</groupId>
    <artifactId>itp02-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>tycho.demo.itp02.bundle</artifactId>
  <packaging>eclipse-plugin</packaging>
</project>

在这个项目中,我们使用了如下代码:
/*******************************************************************************
 * Copyright (c) 2008, 2011 Sonatype Inc. and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Sonatype Inc. - initial API and implementation
 *******************************************************************************/
package tycho.demo.itp02.bundle;

import tycho.demo.itp02.pomfirst.PomFirst;

public class ITP02 {

    public String getMessage() {
        return new PomFirst().getMessage();
    }

}

这里的PomFirst实际上来自其它的工程(pomfirst-bundle)
3.下面来看下它的pom文件是如何定义的:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>tycho.demo.itp02</groupId>
    <artifactId>itp02-pomfirst-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>

  <artifactId>pomfirst-bundle</artifactId>
  
  <dependencies>
    <dependency>
      <groupId>org.codehaus.plexus</groupId>
      <artifactId>plexus-utils</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <executions>
          <execution>
            <id>bundle-manifest</id>
            <phase>process-classes</phase>
            <goals>
              <goal>manifest</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>



去overview选项卡,你会发现它的packaging:jar
这里它也属与第三方jar包,不过不是从外部引用的2进制jar,而是我们自己定义的jar。
OK,接下来咱看看真正的第三方jar如何定义:
4.我们创建名称为pomfirst-thirdparty工程,其中pom文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>tycho.demo.itp02</groupId>
		<artifactId>itp02-pomfirst-parent</artifactId>
		<version>1.0.0-SNAPSHOT</version>
	</parent>
	<artifactId>pomfirst-thirdparty</artifactId>
	<packaging>bundle</packaging>
	<dependencies>
		<dependency>
		  <groupId>org.codehaus.plexus</groupId>
		   <artifactId>plexus-utils</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Embed-Dependency>
							plexus-utils
						</Embed-Dependency>
						<_exportcontents>
							                                org.codehaus.plexus.util.*;version="2.0.7"
						</_exportcontents>
						<Bundle-ClassPath>{maven-dependencies}</Bundle-ClassPath>
						<Embed-Transitive>true</Embed-Transitive>
						<Embed-Directory>jars</Embed-Directory>
						<_failok>true</_failok>
						<_nouses>true</_nouses>
					</instructions>
				</configuration>
			</plugin>
		</plugins>

	</build>
</project>

我们将其打成了bundle。
5.最后我们把pomfirst-bundle,pomfirst-thirdparty交给itp02-pomfirst-parent来管理,这个parent的pom文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<prerequisites>
		<maven>3.0</maven>
	</prerequisites>

	<groupId>tycho.demo.itp02</groupId>
	<artifactId>itp02-pomfirst-parent</artifactId>
	<version>1.0.0-SNAPSHOT</version>
	<packaging>pom</packaging>

	<properties>
		<tycho-version>0.20.0</tycho-version>

		<manifest-location>META-INF</manifest-location>
	</properties>

	<modules>
		<module>pomfirst-bundle</module>
		<module>pomfirst-thirdparty</module>
	</modules>
	
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.codehaus.plexus</groupId>
				<artifactId>plexus-utils</artifactId>
				<version>2.0.7</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<artifactId>maven-jar-plugin</artifactId>
					<version>2.3.1</version>
					<configuration>
						<archive>
							<manifestFile>${manifest-location}/MANIFEST.MF</manifestFile>
						</archive>
					</configuration>
				</plugin>
				<plugin>
					<groupId>org.apache.felix</groupId>
					<artifactId>maven-bundle-plugin</artifactId>
					<version>2.1.0</version>
					<configuration>
						<manifestLocation>${manifest-location}</manifestLocation>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>



为了保证我们之前的eclipse-plugin工程(tycho.demo.itp02.bundle)的成功创建,我们必须先构建我们引用的第三方包(这里说的就是被打成jar和bundle的工程)

6.构建测试插件tycho.demo.itp02.bundle.tests
pom.xml内容如下;
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>tycho.demo.itp02</groupId>
    <artifactId>itp02-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>

  <artifactId>tycho.demo.itp02.bundle.tests</artifactId>
  <packaging>eclipse-test-plugin</packaging>

</project>


7.为了实现在线更新,我们创建tyco.demo.itp02.feature,其中pom的内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>tyco.demo.itp02.feature</artifactId>
  <packaging>eclipse-feature</packaging>
  <parent>
  	<groupId>tycho.demo.itp02</groupId>
  	<artifactId>itp02-parent</artifactId>
  	<version>1.0.0-SNAPSHOT</version>
  </parent>
</project>

8.创建站点工程:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
  <artifactId>tyco.demo.itp02.p2Update</artifactId>
 <packaging>eclipse-repository</packaging>
   <parent>
  	<groupId>tycho.demo.itp02</groupId>
  	<artifactId>itp02-parent</artifactId>
  	<version>1.0.0-SNAPSHOT</version>
  </parent>
  	<build>
		<plugins>
			<plugin>
				<groupId>org.eclipse.tycho</groupId>
				<artifactId>tycho-p2-director-plugin</artifactId>
				<version>${tycho-version}</version>
				<configuration>
					<formats>
						<win32>zip</win32>
						<linux>tar.gz</linux>
						<macosx>tar.gz</macosx>
					</formats>
				</configuration>
				<executions>
					<execution>
						<id>materialize-products</id>
						<goals>
							<goal>materialize-products</goal>
						</goals>
					</execution>
					<execution>
						<id>archive-products</id>
						<goals>
							<goal>archive-products</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>




你可能感兴趣的:(Tycho)