我寫了一個使用第三方庫的應用程序。然後,我使用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>