개미 경고 : " 'includeantruntime'이 설정되지 않았습니다"


397

다음과 같은 경고 메시지가 나타납니다.

[javac] build.xml:9: warning: 'includeantruntime' was not set, 
defaulting to build.sysclasspath=last; set to false for repeatable builds

이것은 무엇을 의미 하는가?

답변:


388

개미 런타임

간단히 설정 includeantruntime="false":

<javac includeantruntime="false" ...>...</javac>

당신이 사용해야하는 경우 javac-task 여러 번 당신은 사용을 고려 할 수 있습니다 PreSetDef자신의 정의 javac항상 세트 것을 -task을 includeantruntime="false".

추가 세부 사항

에서 http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :

Ant 1.8에 도입 된 잘못된 기능 때문입니다. 해당 이름의 속성을 javac 태스크에 추가하고 false로 설정 한 후 발생하는 것을 잊어 버리십시오.

에서 http://ant.apache.org/manual/Tasks/javac.html :

클래스 경로에 Ant 런타임 라이브러리를 포함할지 여부 build.sysclasspath가 설정되어 있지 않으면 기본값은 yes입니다. 스크립트의 동작이 실행되는 환경에 민감하지 않도록 일반적으로이 값을 false로 설정하는 것이 가장 좋습니다.


2010 년 12 월 20 일에 컴파일 된 Apache Ant (TM) 버전 1.8.2
user496949

따라서 클래스 경로에 ant 런타임이 필요한 경우 yes / true로 설정하고 그렇지 않으면 no / false로 설정하십시오. 나는 당신이 필요하지 않은 것 같아요.
Daniel Kutik

5
+1, 훌륭한 답변. 난 그냥 모든 javac 호출을 흩 뜨리지 않고 빌드 파일 어딘가에 한 번 설정할 수 있으면 좋겠다 ...
Jonik

1
True로 설정된 경우에는 어떤 것이 있습니까?
Lorenzo Lerate

"클래스 경로에 Ant 런타임 라이브러리를 포함 시킬지 여부. build.sysclasspath가 설정되어 있지 않으면 기본값은 yes입니다. 일반적으로 스크립트 동작이 실행되는 환경에 민감하지 않도록이를 false로 설정하는 것이 가장 좋습니다. "
Daniel Kutik

72

@Daniel Kutik이 언급했듯이 presetdef좋은 옵션입니다. 특히 build.xml편집 할 수 없거나 선호하지 않는 파일이 많은 프로젝트에서 작업하는 경우 (예 : 타사의 파일)

를 사용하려면 presetdef최상위 build.xml파일 에 다음 줄을 추가 하십시오.

  <presetdef name="javac">
    <javac includeantruntime="false" />
  </presetdef>

이제 모든 후속 javac작업은 본질적으로 상속 includeantruntime="false"됩니다. 프로젝트에 실제로 개미 런타임 라이브러리가 필요한 경우 빌드 파일에 명시 적으로 추가하거나 설정할 수 includeantruntime="true"있습니다. 후자는 또한 경고를 제거합니다.

후속 javac작업은 원하는 경우이를 명시 적으로 변경할 수 있습니다 (예 :

<javac destdir="out" includeantruntime="true">
  <src path="foo.java" />
  <src path="bar.java" />
</javac>

사용하지 않는 것이 좋습니다 ANT_OPTS. 작동하지만 경고의 목적을 무효화합니다. 경고는 빌드 다른 시스템에서 다르게 작동 할 있음을 알려줍니다 . ANT_OPTS모든 시스템을 ANT_OPTS같은 방식으로 사용해야하므로 사용 하면 더욱 가능성이 높아 집니다. 또한 ANT_OPTS모든 프로젝트에서 경고를 무시하고 전 세계적으로 적용됩니다.


1
여러 javac 작업으로 기존 Ant 빌드 파일을 개조하는 데 효과적입니다. presetdef 요소는 프로젝트 요소 안에 들어갑니다.
saxman

@ jwfearn : presetdef내장되지 않은 Ant 작업에 대해 유사한 트릭을 만들 수 있습니까? 나는 이것을 사용해 보았지만 scalac, 하향식 build.xml파일은 수동으로 scalac작업을 정의해야하기 때문에 최상위에서 설정 한 모든 것을 무시합니다.
스튜어트 골로 츠

2
presetdef를 사용하면 javac 태스크가 재정의되었다는 개미 경고가 발생합니다. 각 javac 태스크에 addind includeantruntime이이를 피합니다. 경고의 단점을 알지 못합니다. 그러나 이것은 깨끗한 빌드를 '필요한'사람에게 유용 할 수 있습니다.
mikijov

예 presetdef는 "작업 javac의 오래된 정의를 무시하려고"부여합니다
마이크 존스

62

Chet Hosey여기에 좋은 설명을 썼습니다 .

역사적으로 Ant는 항상 javac 태스크에 사용 가능한 클래스 경로에 자체 런타임을 포함 시켰습니다. 따라서 Ant에 포함 된 라이브러리 및 Ant에 사용 가능한 라이브러리는 원하는지 여부에 관계없이 자동으로 빌드의 클래스 경로에 있습니다.

이것이 아마도 대부분의 사람들이 원하는 것이 아니라고 결정되었습니다. 이제 옵션이 있습니다.

"true"(includeantruntime의 경우)를 선택하면 최소한 빌드 클래스 경로에 Ant 런타임이 포함된다는 것을 알고 있습니다. "false"를 선택하면 이전 버전과 1.8 이상에서 빌드 동작이 변경된다는 사실을 받아들입니다.

이 경고를 보는 것처럼 짜증이 나더라도 빌드가 완전히 중단되면 더 행복하지 않을 것입니다. 이 기본 동작을 유지하면 수정되지 않은 빌드 파일이 Ant 버전간에 일관되게 작동 할 수 있습니다.


3
나는 항상 이것이 가장 바보 같은 기능 / 메시지라고 생각했습니다. 구성 관리 도구에서 '반복 가능한 빌드'를 원하는 사람은 누구입니까? ;)
karmakaze

1
이 답변은 경고의 실제 의미를 알려주는 유일한 답변 인 것 같습니다.
ty

26

다니엘의 대답은 완벽하게 작동합니다. 다음은 build.xml에 추가 한 샘플 스 니펫입니다.

<target name="compile">
    <mkdir dir="${classes.dir}"/>
    <javac srcdir="${src.dir}" destdir="${classes.dir}" includeantruntime="false">
                                                 <!--   ^^^^^^^^^^^^^^^^^^^^^^^^^  -->
        <classpath>
            <path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
            <path id="junit" location="${lib.dir}/junit-4.9b2.jar"/>
        </classpath>
    </javac>
</target>

5

명령 줄에서 작업하는 것을 좋아한다면 빠른 답변이 실행됩니다.

export ANT_OPTS=-Dbuild.sysclasspath=ignore

그런 다음 개미 스크립트를 다시 실행하십시오.


이것은 나를 많이 도와줍니다 . 을 사용하고 set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore있습니다.
Paul Vargas


-3

나는 이것을 똑같이 직면했다. 나는 프로그램과 기능을 체크인한다. 일식에 대한 개미에 대한 이전 설정 (jdk1.6.0)과 호환되지 않는 jdk1.8에 대한 업데이트가 설치되었습니다. 해당 업데이트를 설치합니다. 지금, 내 개미 프로젝트는 성공적으로 빌드되었습니다.

사용해보십시오, 이것이 도움이 되길 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.