我写了一个使用第三方库的应用程序。然后,我使用maven-assembly-plugin(生成一个包含一些第三方jar的所有依赖关系的jar)将它打包为一个可执行的jar。构建一个用于eclipse PDE的jar?
接下来,我需要将此jar添加到PDE项目,以便它可以从eclipse启动。但为了做到这一点,我需要将一些thirs-party依赖项添加到已经位于打包jar中的PDE项目中。所以我得到重复的依赖关系。任何想法如何避免这种情况?或者对文档描述如何正确完成的建议?
我写了一个使用第三方库的应用程序。然后,我使用maven-assembly-plugin(生成一个包含一些第三方jar的所有依赖关系的jar)将它打包为一个可执行的jar。构建一个用于eclipse PDE的jar?
接下来,我需要将此jar添加到PDE项目,以便它可以从eclipse启动。但为了做到这一点,我需要将一些thirs-party依赖项添加到已经位于打包jar中的PDE项目中。所以我得到重复的依赖关系。任何想法如何避免这种情况?或者对文档描述如何正确完成的建议?
你应该建立一个jar,这是一个OSGi包:所以它包含了所需的manifest.mf,并带有一个插件ID和一个版本号(这不会改变事实,jar仍然可执行)。请注意添加export-packages选项以使代码可用于其他插件/软件包。
之后,您可以将此jar安装到PDE项目使用的目标平台中(在首选项中搜索Target平台),以便其可通过该ID将其用于其他插件(您可以将其添加为依赖项)。
这样,如果至少有一个插件需要你的jar,它会被加载,但不会被加载多次。
我认为在你的jar包中包含其他jar是一种普通的坏习惯。但如果你想保持这种方式,如何从一个版本创建两个罐子:一个完整的依赖和一个简单的PDE(在汇编插件中使用多个执行)
我现在用行家束-插件:
<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>