如何使用tycho

时间:2016-08-31 06:02:47

标签: eclipse war web-deployment tycho eclipse-rap

我有一个e4 RCP产品,我想为其提供e4 RAP应用程序。因此,我添加了一个新的OSGi包,它提供了org.eclipse.rap.rwt.application.ApplicationConfiguration接口的以下实现,该接口在OSGI-INF文件夹的contrib.xml中声明:

public class BasicApplication implements ApplicationConfiguration {

    public void configure(Application application) {
        Map<String, String> properties = new HashMap<String, String>();
        properties.put(WebClient.PAGE_TITLE, "My RAP Application");
        Bundle bundle = FrameworkUtil.getBundle(my.package.E4LifeCycle.class);
        String symbolicName = bundle.getSymbolicName();
        String appXmiLocation = "platform:/plugin/" + symbolicName + "/Application.e4xmi";
        String lifeCycleLocation = "bundleclass://" + symbolicName + "/" + my.package.E4LifeCycle.class.getName();
        E4ApplicationConfig applicationConfig = E4ApplicationConfig.create(appXmiLocation, lifeCycleLocation);
        E4EntryPointFactory entryPointFactory = new E4EntryPointFactory(applicationConfig);
        application.addEntryPoint("/myapp", entryPointFactory, properties);
        application.setOperationMode(OperationMode.SWT_COMPATIBILITY);
    }

}

按照示例here,我创建了一个新的功能包,包括所需的插件,并依赖于所有必需的与eclipse相关的插件/功能(e4,rap,rwt,osgi,...)。它包含这个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>
    <artifactId>my.app.rap.feature</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>eclipse-feature</packaging>

    <parent>
        <groupId>my.app</groupId>
        <artifactId>my.app.parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../../releng/my.app.parent</relativePath>
    </parent>

    <properties>
        <output.directory>${basedir}/target/WEB-INF</output.directory>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-packaging-plugin</artifactId>
                <version>${tycho.version}</version>
                <configuration>
                    <deployableFeature>true</deployableFeature>
                </configuration>
            </plugin>

            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>copy-web-inf</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${output.directory}</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}/templates/WEB-INF</directory>
                                    <includes>
                                        <include>**</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-plugins</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${output.directory}/eclipse</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>${basedir}/target/site</directory>
                                    <includes>
                                        <include>*/**</include>
                                    </includes>
                                    <excludes>
                                        <exclude>*.jar</exclude>
                                    </excludes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <descriptors>
                        <descriptor>assembly.xml</descriptor>
                    </descriptors>
                    <finalName>my-app</finalName>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

引用的assembly.xml如下所示:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd">
    <id>rap</id>
    <formats>
        <format>war</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <fileSets>
        <fileSet>
            <directory>${output.directory}</directory>
            <outputDirectory>/WEB-INF</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

为了完整性,这里是父母的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>
    <groupId>my.app</groupId>
    <artifactId>my.app.parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <tycho.version>0.25.0</tycho.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-compiler-plugin</artifactId>
                <version>${tycho.version}</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-maven-plugin</artifactId>
                <version>${tycho.version}</version>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                <groupId>org.eclipse.tycho</groupId>
                <artifactId>tycho-versions-plugin</artifactId>
                <version>${tycho.version}</version>
            </plugin>
        </plugins>
    </build>


    <repositories>

        <repository>
            <id>eclipse-RAP</id>
            <url>http://download.eclipse.org/rt/rap/3.1</url>
            <layout>p2</layout>
        </repository>

        <repository>
            <id>eclipse-RAP-e4</id>
            <url>http://download.eclipse.org/rt/rap/incubator/nightly/e4/target/site</url>
            <layout>p2</layout>
        </repository>

        <repository>
            <id>neon-orbit</id>
            <url>http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/repository/</url>
            <layout>p2</layout>
        </repository>

    </repositories>

</project>

在templates / WEB-INF中,我放置了web.xml和由WAR products工具生成的launch.ini。 web.xml看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app id="WebApp">
  <servlet id="bridge">  
    <servlet-name>equinoxbridgeservlet</servlet-name>
    <display-name>Equinox Bridge Servlet</display-name>
    <description>Equinox Bridge Servlet</description>
    <servlet-class>org.eclipse.equinox.servletbridge.BridgeServlet</servlet-class>

    <!-- Framework Controls could be useful for testing purpose, but
         we disable it per default -->
    <init-param>
      <param-name>enableFrameworkControls</param-name>
      <param-value>false</param-value>      
    </init-param>

    <!-- Enable multi-language support for the extension registry -->
    <!-- the OSGi console is useful for trouble shooting but will fill up your 
         appserver log quickly, so deactivate on production use. Uncomment
         the -console parameter to enabled OSGi console access.  -->
    <init-param>
      <param-name>commandline</param-name>
      <param-value>-registryMultiLanguage <!-- -console --></param-value>     
    </init-param>

    <load-on-startup>1</load-on-startup>    
  </servlet>

  <servlet-mapping>
    <servlet-name>equinoxbridgeservlet</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

</web-app>

而launch.ini如下:

# Eclipse Runtime Configuration Overrides
# These properties are loaded prior to starting the framework and can also be used to override System Properties
# @null is a special value used to override and clear the framework's copy of a System Property prior to starting the framework
# "*" can be used together with @null to clear System Properties that match a prefix name. 

osgi.*=@null
org.osgi.*=@null
eclipse.*=@null

osgi.parentClassloader=app
osgi.contextClassLoaderParent=app

构建成功并生成war文件。我将它放在我的Tomcat的webapps目录中并自动解压缩。但是当我将我的浏览器指向http:// localhost:8080 / my-app-rap时,我只得到一个404.所以我假设某些配置在哪个地方缺少使用的起点。你能帮我搞清楚吗?

1 个答案:

答案 0 :(得分:0)

尝试更改您尝试访问的地址: http://localhost:8080 /&lt; .war文件。&gt; // myapp