如何从MAven + BND生成的OSGI包中排除GWT依赖代码?

我在根pom.xml文件中有几个Maven模块,Vaadin库依赖项。

我试图使用Maven + BND构建一组OSGI包(每个Maven模块1个)。

我将它添加到我的“root”pom.xml文件中:

    <dependencies>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin</artifactId>
        <version>6.6.6</version>
    </dependency>
    <dependency>
        <groupId>com.google.gwt</groupId>
        <artifactId>gwt-user</artifactId>
        <version>2.3.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.felix</groupId>
        <artifactId>org.osgi.core</artifactId>
        <version>1.0.0</version>
    </dependency>
    </dependencies>

不幸的是,生成的JAR文件(捆绑)包括GWT(com.google.gwt)类。 这1)使捆绑巨大,有很多重复的依赖关系。 2)产生了数千个关于“拆分包”的构建警告。

问题:如何防止将GWT类添加到我的Jar文件中?

我尝试将GWT的“范围”设置为“提供”,将“类型”设置为“捆绑”,甚至可选= true - 都没有帮助。

这里是我的根pom.xml的部分,它负责Vaadin / GWT的东西:

    <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <version>2.3.5</version>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Export-Package>mycompany.*</Export-Package>
                    <Private-Package>*.impl.*</Private-Package>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <!--                        <Bundle-Activator>com.alskor.publicpackage.MyActivator</Bundle-Activator>-->
                </instructions>
            </configuration>
        </plugin>
        <!-- Compiles your custom GWT components with the GWT compiler -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>gwt-maven-plugin</artifactId>
            <!-- Version 2.1.0-1 works at least with Vaadin 6.5 -->
            <version>2.3.0-1</version>
            <configuration>
                <!-- if you don't specify any modules, the plugin will find them -->
                <!--modules>
                    ..
                </modules-->
                <webappDirectory>${project.build.directory}/${project.build.finalName}/VAADIN/widgetsets
                </webappDirectory>
                <extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs>
                <runTarget>clean</runTarget>
                <hostedWebapp>${project.build.directory}/${project.build.finalName}</hostedWebapp>
                <noServer>true</noServer>
                <port>8080</port>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>resources</goal>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <!-- Updates Vaadin 6.2+ widgetset definitions based on project dependencies -->
        <plugin>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-maven-plugin</artifactId>
            <version>1.0.1</version>
            <executions>
                <execution>
                    <configuration>
                        <!-- if you don't specify any modules, the plugin will find them -->
                        <!--
                        <modules>
                            <module>${package}.gwt.MyWidgetSet</module>
                        </modules>
                        -->
                    </configuration>
                    <goals>
                        <goal>update-widgetset</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

您的出口包装和私人包装声明中的通配符使我非常危险。 由于Private-Package中的*.impl.*模式,可能会导致GWT软件包被拖入。

你也不应该在Export-Package中使用通配符:出口应该严格控制和版本控制。


  • 使用mvn依赖关系:树来查看gwt依赖关系来自哪里
  • 用一个适当的<exclude/>添加一个<excludes/>元素给相关的依赖项来抑制它。
  • 链接地址: http://www.djcxy.com/p/74751.html

    上一篇: how to exclude GWT dependency code from OSGI bundle generated by MAven+BND?

    下一篇: using JPA from WAB in glassfish 3.1