2013-07-15 2 views
0

У меня есть банка прямо сейчас, которая использует внешние зависимости. Я пытаюсь создать банку, которая содержит все внешние зависимости внутри, и просто даст мне одну банку. Я несколько раз задавал этот вопрос, но я все еще не могу понять. Я использую Ant, и скопировал некоторые из примеров, которые я видел здесь. Я использую zipgroupfileset для ссылки на внешние (теперь внутренние) банки. Как только я добавил zipgroupfileset, я получил ошибку времени выполнения, в которой не было найдено, что мой класс Runner не найден.Ant с внутренними зависимостями

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!-- WARNING: Eclipse auto-generated file. 
       Any modifications will be overwritten. 
       To include a user specific buildfile here, simply create one in the same 
       directory with the processing instruction <?eclipse.ant.import?> 
       as the first entry and export the buildfile again. --> 
<project basedir="." default="build" name="ExcelDemo"> 
    <property environment="env"/> 
    <property name="ECLIPSE_HOME" value="../../../../Program Files (x86)/eclipse"/> 
    <property name="debuglevel" value="source,lines,vars"/> 
    <property name="target" value="1.6"/> 
    <property name="source" value="1.6"/> 
    <property name="external-lib-dir" value="lib\poi-3.9" /> 
    <property name="external-lib-dir2" value="lib\poi-3.9\lib" /> 
    <property name="external-lib-dir3" value="lib\poi-3.9\ooxml-lib" /> 
    <path id="ExcelDemo.classpath"> 
     <pathelement location="bin"/> 
    </path> 
    <target name="init"> 
     <mkdir dir="bin"/> 
     <copy includeemptydirs="false" todir="bin"> 
      <fileset dir="src" excludes="**/*.launch, **/*.java"/> 
     </copy> 
    </target> 
    <target name="clean"> 
     <delete dir="bin"/> 
    </target> 
    <target depends="clean" name="cleanall"/> 
    <target depends="build-subprojects,build-project" name="build"/> 
    <target name="build-subprojects"/> 
    <target depends="init" name="build-project"> 
     <echo message="${ant.project.name}: ${ant.file}"/> 
     <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}"> 
      <src path="src"/> 
      <classpath refid="ExcelDemo.classpath"/> 
     </javac> 
    </target> 
    <target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"> 
     <ant antfile="${ExcelSensitize.location}/build.xml" inheritAll="false" target="clean"/> 
     <ant antfile="${ExcelSensitize.location}/build.xml" inheritAll="false" target="build"> 
      <propertyset> 
       <propertyref name="build.compiler"/> 
      </propertyset> 
     </ant> 
    </target> 
    <target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler"> 
     <copy todir="${ant.library.dir}"> 
      <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/> 
     </copy> 
     <unzip dest="${ant.library.dir}"> 
      <patternset includes="jdtCompilerAdapter.jar"/> 
      <fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/> 
     </unzip> 
    </target> 
    <target description="compile project with Eclipse compiler" name="build-eclipse-compiler"> 
     <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/> 
     <antcall target="build"/> 
    </target> 
    <target name="RunnerClass"> 
     <java classname="runner.RunnerClass" failonerror="true" fork="yes"> 
      <classpath refid="ExcelDemo.classpath"/> 
     </java> 
    </target> 
    <target name="jar" description="Create a jar for this project"> 
     <manifestclasspath property="lib.list" jarfile="Test.jar"> 
      <classpath refid="ExcelDemo.classpath" /> 
     </manifestclasspath> 
     <jar jarfile="Test.jar" includes="*.class" basedir="bin"> 
      <zipgroupfileset dir="${external-lib-dir}" includes="*.jar"/> 
      <zipgroupfileset dir="${external-lib-dir2}" includes="*.jar"/> 
      <zipgroupfileset dir="${external-lib-dir3}" includes="*.jar"/> 
      <manifest> 
       <attribute name="Class-Path" value="${lib.list}" /> 
       <attribute name="Main-Class" value="runner.RunnerClass" /> 
      </manifest> 
     </jar> 
    </target> 
</project> 

ответ

1

Чтобы сделать вещи проще:

  • Создать отдельный источники баночка для компиляции. Затем создайте отдельную скомпилированную банку без источников.
  • Не включайте сторонние банки. Вместо этого используйте Ivy with Ant. Ant автоматически загрузит необходимые банки. Фактически, я вижу источники, которые включают только ivy.jar, поэтому Ivy будет автоматически настроен, когда вы развяжете источники. Вы вводите ant, и все просто строит.

В качестве альтернативы вы можете посмотреть Maven, что представляет собой количество проектов, которые теперь упакованы. На самом деле, если ваша jar - проект с открытым исходным кодом, вы можете разместить его в репозитории OSS Maven. Таким образом, никому даже не нужно вручную загружать собранную банку. Если они этого захотят, они сконфигурируют свой проект Maven, чтобы сделать это для них.

0

Я думаю, проблема заключается в том, что вы используете basedir = "bin" в своей задаче о банке. то путь ваш zipgroupfileset конвертировать бен/$ {внешний Пб-каталог}

Смежные вопросы