【问题标题】:Building a jar to be used in an eclipse PDE?构建要在 Eclipse PDE 中使用的 jar?
【发布时间】:2010-06-10 15:21:19
【问题描述】:

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

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

【问题讨论】:

    标签: eclipse maven-2 pde


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我现在正在使用 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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-18
          相关资源
          最近更新 更多