2010-06-10 53 views
0

我写了一个使用第三方库的应用程序。然后,我使用maven-assembly-plugin(生成一个包含一些第三方jar的所有依赖关系的jar)将它打包为一个可执行的jar。构建一个用于eclipse PDE的jar?

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

回答

1

你应该建立一个jar,这是一个OSGi包:所以它包含了所需的manifest.mf,并带有一个插件ID和一个版本号(这不会改变事实,jar仍然可执行)。请注意添加export-packages选项以使代码可用于其他插件/软件包。

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

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

0

我认为在你的jar包中包含其他jar是一种普通的坏习惯。但如果你想保持这种方式,如何从一个版本创建两个罐子:一个完整​​的依赖和一个简单的PDE(在汇编插件中使用多个执行)

0

我现在用行家束-插件:

 <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

建立一个包。但是,如何使用bundle插件,以便使用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> 
<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>