Как использовать FatJar (из Eclipse) в сервере непрерывной интеграции? - PullRequest
1 голос
/ 07 ноября 2010

Из того, что я понял, FatJar - это плагин Eclipse, основанный на платформе OSGi. Я считаю, что это затрудняет использование вне платформы OSGi. Кроме того, если взглянуть на декомпилированный FatJar, кажется, что для этого требуется множество классов OSGi и Eclipse, например, org.eclipse.jdt.core.IJavaProject и org.osgi.framework.BundleContext.

Итак, перед всем этим мне интересно, есть ли способ использовать наши драгоценные файлы * .fatjar с Hudson (используя скрипт или что-то еще).

Любой хороший совет можно только приветствовать! Спасибо!

Ответы [ 4 ]

2 голосов
/ 22 ноября 2010

После продолжительной работы и исследований кажется, что, хотя FatJar - это прежде всего плагин Eclipse, его можно довольно легко интегрировать в серверы непрерывной интеграции.

В моем случае, используя Ant, я имеюобнаружил, что можно запустить плагин FatJar вне Eclipse, используя следующий код (первоначально с этот сайт ).

<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 голосов
/ 08 ноября 2010

FatJar - это плагин Eclipse, обеспечивающий функциональность в одну банку.За пределами Eclipse вы просто используете один сосуд непосредственно.

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

Обратите внимание, что процесс усложнения Eclipse нелегокскрипт.Я сделал это в Ant, используя ant4eclipse, и я бы рекомендовал против этого.РЕДАКТИРОВАТЬ: С 2015 года вы должны смотреть на проекты Maven вместо простого Eclipse.

0 голосов
/ 14 октября 2016

Да, его можно использовать вне затмения. Попробуйте конфигурацию, подобную следующей:

<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>
0 голосов
/ 08 ноября 2010

Мой совет - искать альтернативу FatJar, которая работает с вашим инструментом сборки.

  • Если вы используете Maven, взгляните на плагин shade .
  • Для Ant вы можете выполнять работу с соответствующей последовательностью задач отмены, копирования и обмена.
...