Что означает предупреждение Ant «Ссылка * не была установлена во время выполнения …»?

#ant

#ant

Вопрос:

С момента обновления с Ant 1.6.5 до 1.7.1 мой вывод сборки начинается с:

 Warning: Reference project.classpath has not been set at runtime, but was found during
build file parsing, attempting to resolve. Future versions of Ant may support
 referencing ids defined in non-executed targets.
Warning: Reference project.test.classpath has not been set at runtime, but was found during
build file parsing, attempting to resolve. Future versions of Ant may support
 referencing ids defined in non-executed targets.
  

У меня проблемы с пониманием этого и почему оно выводится, не говоря уже о попытке избавиться от него. Буду признателен за любую помощь!

Редактировать:

Определен путь к классу:

 <path id="project.classpath">
        <pathelement path="./${build.dir}" />
        <path refid="libs.ant" />
        <fileset dir="${lib.dir}/dependencies/bar" includes="compile/*.jar" />
        <fileset dir="${lib.dir}/dependencies/foo" includes="provided/*.jar" />
</path>

<!-- The classpath for compiling this projects' tests -->
<path id="project.test.classpath">
        <path refid="project.classpath" />
        <fileset dir="${lib.dir}/dependencies/bar" includes="test/*.jar" />
        <fileset dir="${lib.dir}/dependencies/foo" includes="test/*.jar" />
</path>

<property name="project.classpath" refid="project.classpath" />
  

На него ссылаются (например, в ) таким образом:

 <classpath refid="project.classpath"/>
  

Комментарии:

1. Можете ли вы показать соответствующий код, который устанавливает / использует project.classpath? Похоже, у вас могут быть две ссылки с одинаковым именем или неиспользуемая.

Ответ №1:

У меня была такая же проблема раньше. Просто убедитесь, что «project.classpath» определен в начале файла сборки, прежде чем другие целевые объекты будут ссылаться на него. Также ваш путь «libs.ant» должен быть определен перед «project.classpath».

В Ant 1.8 это фактически будет ошибкой, а не предупреждением.

Ответ №2:

Вы можете задать classpath в файле сборки следующим образом, чтобы избавиться от этого предупреждения. Смотрите ссылку. http://ant.apache.org/manual/using.html

 <project ... >
  <path id="project.class.path">
    <pathelement location="lib/"/>
    <pathelement path="${java.class.path}/"/>
    <pathelement path="${additional.path}"/>
  </path>

  <target ... >
    <rmic ...>
      <classpath refid="project.class.path"/>
    </rmic>
  </target>

  <target ... >
    <javac ...>
      <classpath refid="project.class.path"/>
    </javac>
  </target>
</project>
  

Комментарии:

1. У меня определен ‘project.classpath’. Вы имеете в виду, что я должен ссылаться на это в каждой цели?

Ответ №3:

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

 <property name="project.classpath" refid="project.classpath" />
  

Комментарии:

1. Вы имеете в виду ‘name’ и ‘refid’, имеющие здесь одинаковое значение? Свойство создано потому, что, по-видимому, jvmarg не поддерживал ‘refid’. Если я полностью удалю эту строку, проблема все равно сохранится.