2016-11-02 8 views
0

Я не могу скомпилировать исходный код с терминалом Ant через так, как будто зависимости не решены правильно, несмотря на то, что я выдаю 'ant resolve or ant retrieve'?Java - Apache Ivy неправильно разрешает зависимости

Мой build.xml и ivy.xml ниже

build.xml

<!-- ANT HOME ENVIRONMENT VARIABLE --> 
<property name="ant.home" value="${env.ANT_HOME}" /> 

<!-- IVY HOME DIRECTORY --> 
<property name="ivy.home" value="${ant.home}" /> 

<!-- IVY2 JAR DIRECTORY (REPOSITORY) --> 
<property name="ivy.default.ivy.user.dir" value="${user.home}/.ivy2"/> 

<!-- DOWNLOAD IVY --> 
<target name="setup" description="Install ivy"> 
    <mkdir dir="${user.home}/.ivy2" /> 
    <get dest="${ivy.home}/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar"/> 
</target> 

<!-- RESOLVE CLASSPATHS --> 
<target name="resolve" description="Use ivy to resolve classpaths"> 
    <ivy:resolve file="ivy.xml" /> 
    <ivy:report todir='target/ivy-reports' graph='false' xml='false'/> 
    <ivy:cachepath pathid="ivy.path" conf="compile" /> 
</target> 

<!-- RETRIEVE DEPENDANCIES AFTER RESOLVING--> 
<target name="retrieve" depends="resolve" description="Use ivy to retrieve dependencies"> 
    <ivy:retrieve sync="true" type="jar" /> 
</target> 

<!-- COMPILE PROJECT --> 
<target name="compile" depends="clean, retrieve"> 
    <!-- Create build directory --> 
    <mkdir dir="target/${ant.project.name}" /> 

    <!-- Compile source code --> 
    <javac includeantruntime="false" srcdir="src" debug="true" destdir="target/${ant.project.name}" > 
     <classpath> 
      <path refid="ivy.path" /> 
     </classpath> 
    </javac> 
</target> 

<!-- CLEAN TARGET DIRECTORY --> 
<target name="clean"> 
    <delete dir="target/orderlycalls" /> 
    <delete dir="target/classes" /> 
    <delete dir="target/ivy-reports" />  
</target> 

<!-- CLEAN TARGET AND IVY CATCHE --> 
<target name="clean-all" depends="clean" description="Additionally purge ivy cache"> 
    <ivy:cleancache/> 
</target> 

ivy.xml

<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd"> 

    <configurations> 
     <conf name="default" visibility="public" description="The single built artifact. Nothing else"/> 
     <conf name="compile" visibility="public" description="The master module and transitive dependencies"/> 
     <conf name="provided" visibility="public" description="Needed for compile. Will be provided outside or war"/> 
     <conf name="runtime" visibility="public" description="Not required for compile, but for runtime" extends="compile"/> 
     <conf name="default" visibility="public" description="The default configuration" extends="runtime"/> 
     <conf name="test" visibility="private" description="Required for testing" extends="runtime"/> 
    </configurations> 

    <dependencies> 
     <dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3" conf="provided"/> 
     <dependency org="org.apache.tomcat.embed" name="tomcat-embed-core" rev="7.0.53" conf="provided"/> 
    </dependencies> 

</ivy-module> 

, когда я запускаю 'муравей компиляции', появляющимся на компилятор ant жалуется, что не может найти «сервлет-контекст», который является частью tomcat.jar или «TObject», «THashMap», который являются частью trove.jar и многих других, несмотря на то, что я извлекаю/разрешаю банки в файле build.xml.

Еще одна вещь, которую я заметил, - это то, что внутри моего .ivy2/cache // нет реальных файлов jar. Только файлы xml

Любая идея, что я делаю неправильно или вообще не делаю?

Благодаря

ответ

1

Вы использовали задачу cachepath создать Ant Path, используя зависимость, связанную с конфигурацией «компилировать».

<ivy:cachepath pathid="ivy.path" conf="compile" /> 

Ваш вопрос лежит файл плющ, где вы не указали никаких зависимостей с отображением в конфигурацию «компилировать». Это объясняет, почему ваша задача javac не может видеть банок.

<configurations> 
     ... 
     <conf name="compile" .../> 
     <conf name="provided" .../> 
     ... 
    </configurations> 

    <dependencies> 
     <dependency ... conf="provided"/> 
     <dependency ... conf="provided"/> 
    </dependencies> 

Я предлагаю создать явное отображение для каждого из ваших конфигураций, например:

<!-- Compile dependencies --> 
<dependency org="net.sf.trove4j" name="trove4j" rev="3.0.3" conf="compile->default"/> 

<!-- provided dependencies --> 
<dependency org="org.apache.tomcat.embed" name="tomcat-embed-core" rev="7.0.53" conf="provided->master"/> 

Единственные отображения рунета являются следующими удаленными конфигурациями:

  • по умолчанию Удаленная банка плюс ее транзитивные зависимости
  • мастер Remote баночка только

Для получения дополнительной информации о том, как плющ интерпретирует удаленные модули Maven, пожалуйста, прочитайте следующее:

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

  • Нет связанных вопросов^_^