2010-11-07 18 views
1

從我的理解,FatJar是基於OSGi框架的Eclipse插件。我相信這會讓它很難在OSGi平臺之外使用。另外,查看反編譯的FatJar,它似乎需要大量的OSGi和Eclipse類,例如org.eclipse.jdt.core.IJavaProjectorg.osgi.framework.BundleContext如何在持續集成服務器中使用FatJar(超出Eclipse)?

所以,在所有這一切,我想知道是否有任何方式使用我們寶貴的* .fatjar文件與哈德森(使用腳本或其他)。

歡迎任何好的建議! 謝謝!

回答

2

經過更多的工作和研究,似乎即使FatJar主要是一個Eclipse插件,也可以很容易地將它集成到持續集成服務器中。

在我的情況下,使用Ant,我發現可以使用下面的代碼(最初來自this site)在Eclipse之外運行FatJar插件。

<project name="FatJar MySuperDuperClass.jar (experimental)" default="main" basedir="."> 
    <!-- this file was created by Fat-Jar Eclipse Plug-in --> 
    <!-- the ANT-Export is in a very early stage, so this --> 
    <!-- is only experimental, ANT 1.6 or above is  --> 
    <!-- required, feedback is always welcome:   --> 
    <!--  http://sourceforge.net/projects/fjep  --> 
    <!-- uncomment the following lines if using ANT outside Eclipse --> 
    <!-- 
     <property name="fjepPath" value="plugins/net.sf.fjep.fatjar_0.0.31/fatjar.jar"/> 
     <taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" classpath="${fjepPath}"/> 
     <typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" classpath="${fjepPath}"/> 
     <typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" classpath="${fjepPath}"/> 
    --> 
    <!-- uncomment the above lines to use ANT outside of Eclipse --> 
    <target name="main"> 
     <fatjar.build output="MySuperDuperClass.jar"> 
     <fatjar.manifest mainclass="de.schwobeseggl.test.MySuperDuperClass"/> 
     <fatjar.filesource path="bin" relpath=""/> 
     <fatjar.jarsource file="lib/commons-cli.jar" relpath=""/> 
     <fatjar.jarsource file="lib/jbossall-client.jar" relpath=""/> 
     <fatjar.jarsource file="lib/junit.jar" relpath=""/> 
     <fatjar.jarsource file="lib/log4j.jar" relpath=""/> 
     <fatjar.jarsource file="lib/jdom.jar" relpath=""/> 
     </fatjar.build> 
    </target> 
</project> 

我在開始時取消註釋了6行代碼塊,它的工作良好。閱讀頂部的評論,似乎這是使用FatJar本身導出的,但不知道如何做到這一點。我只是將這個示例調整到我的用例。

2

FatJar是一個Eclipse插件,提供一個jar功能。在Eclipse之外,你可以直接使用one-jar。

http://one-jar.sourceforge.net/

注意的是,Eclipse的複雜過程是不容易的腳本。我已經在Ant中使用ant4eclipse完成了它,我會推薦它。編輯:截至2015年你應該看看Maven項目,而不是普通的Eclipse。

0

我的建議是尋找FatJar的替代品,它可以與你的構建工具一起工作。

  • 如果您使用的是Maven,請查看shade插件。
  • 對於Ant,您可以使用適當的unjaring,copying和jaring任務序列完成這項工作。
0

是的,它可以在日食中使用它。嘗試類似於以下配置的配置:

<property name="java.source" value="1.7" /> 
<property name="java.target" value="1.7" /> 
<property name="src.dir" location="src" /> 
<property name="libraries.dir" location="lib" /> 
<property name="dist.dir" location="out" /> 
<property name="build.classes.dir" location="${dist.dir}\classes" /> 
<property name="dist.jar" value="MyJAR.jar" /> 
<property name="fjepPath" value="${libraries.dir}\fatjar.jar" /> 

... 

<typedef name="fatjar.manifest" classname="net.sf.fjep.anttask.FJManifestType" 
     classpath="${fjepPath}" loaderref="${fjepPath}" /> 
<typedef name="fatjar.exclude" classname="net.sf.fjep.anttask.FJExcludeType" 
     classpath="${fjepPath}" loaderref="${fjepPath}" /> 
<typedef name="fatjar.jarsource" classname="net.sf.fjep.anttask.FJJarSourceType" 
     classpath="${fjepPath}" loaderref="${fjepPath}" /> 
<typedef name="fatjar.filesource" classname="net.sf.fjep.anttask.FJFileSourceType" 
     classpath="${fjepPath}" loaderref="${fjepPath}" /> 
<taskdef name="fatjar.build" classname="net.sf.fjep.anttask.FJBuildTask" 
     classpath="${fjepPath}" loaderref="${fjepPath}" /> 

... 

<target name="buildJar"> 
    <echo>Building JAR</echo> 
    <fatjar.build output="${dist.dir}\${dist.jar}"> 
     <fatjar.manifest mergemanifests="false" mainclass="com.company.app.Main" /> 
     <fatjar.filesource path="${build.classes.dir}" /> 
     <fatjar.jarsource file="${libraries.dir}\log4j-1.2.17.jar" /> 
     <fatjar.jarsource file="${libraries.dir}\commons-httpclient-2.0.jar" /> 
     ... 
    </fatjar.build> 
</target> 
相關問題