0

我编写了一个使用第三方库的应用程序。然后,我使用 maven-assembly-plugin 将其打包为可执行 jar(生成一个包含所有依赖项的 jar,包括一些第三方 jar)。

接下来,我需要将此 jar 添加到 PDE 项目中,以便可以从 eclipse 中启动它。但是为了完成这项工作,我需要将一些第三方依赖项添加到我的 PDE 项目中,该项目已经位于打包的 jar 中。所以我得到了重复的依赖项。关于如何避免这种情况的任何想法?或者对描述如何正确完成的文档提出建议?

4

3 回答 3

1

您应该构建一个 jar,它是一个 OSGi 包:因此它包含所需的 manifest.mf 以及一个插件 id 和一个版本号(这不会改变 jar 仍然可执行的事实)。小心添加 export-packages 选项以使代码也可用于其他插件/捆绑包。

之后,您可以将此 jar 安装到 PDE 项目使用的目标平台中(在首选项中搜索 Target platform),这样它就可以通过 ID 用于其他插件(您可以将其添加为依赖项)。

这样,如果至少有一个插件需要您的 jar,它会被加载,但不会被多次加载。

于 2010-06-11T19:03:54.760 回答
0

我认为将其他 jar 包含在您的 jar 中只是简单的不好的做法。但是如果你想保持这种状态,那么从一个构建中创建两个 jar 怎么样:一个完整​​的具有依赖关系的,一个简单的在 PDE 中使用(只需在程序集插件中使用多个执行)

于 2010-06-11T07:38:51.013 回答
0

我现在正在使用 maven-bundle-plugin:

      <plugin>
          <groupId>org.apache.felix</groupId>
          <artifactId>maven-bundle-plugin</artifactId>
          <version>1.4.0</version>
          <extensions>true</extensions>
          <configuration>
              <instructions>
                  <Bundle-SymbolicName>${pom.groupId}.${pom.artifactId}</Bundle-SymbolicName>
                  <Bundle-Name>${pom.name}</Bundle-Name>
                  <Bundle-Version>${pom.version}</Bundle-Version>
                  <Bundle-Activator>org.wso2.mbp.sample01.Activator</Bundle-Activator>
                  <Private-Package>org.wso2.mbp.sample01</Private-Package>
              </instructions>
          </configuration>
      </plugin> 

http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html

构建一个捆绑包。但是我如何使用捆绑插件,以便使用 maven-assembly-plugin 为 jar 构建创建 MANIFEST 文件,我使用如下:

    <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <appendAssemblyId>true</appendAssemblyId>
      <finalName>myApp</finalName>

      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>         
      <archive>
        <manifest>
          <mainClass>com.TestMain</mainClass>                     
          <packageName>com.</packageName>
        </manifest>
      </archive>    
    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id>
        <phase>package</phase>
        <goals>
          <goal>assembly</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
于 2010-06-12T14:00:27.677 回答