Eu recebo o seguinte aviso:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
O que isto significa?
Eu recebo o seguinte aviso:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
O que isto significa?
Respostas:
Basta definir includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Se você precisar usar a javac
-tarefa várias vezes, considere usar PreSetDef
para definir sua própria javac
-tarefa que sempre define includeantruntime="false"
.
Em http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Isso é causado por uma falha de funcionalidade introduzida no Ant 1.8. Basta adicionar um atributo com esse nome à tarefa javac, configurá-lo como false e esquecer que isso já aconteceu.
Em http://ant.apache.org/manual/Tasks/javac.html :
Se as bibliotecas de tempo de execução Ant devem ser incluídas no caminho de classe; o padrão é yes, a menos que build.sysclasspath esteja configurado. Geralmente, é melhor definir isso como false, para que o comportamento do script não seja sensível ao ambiente em que é executado.
Como o @Daniel Kutik mencionou, presetdef
é uma boa opção. Especialmente se alguém estiver trabalhando em um projeto com muitos build.xml
arquivos que não podem ou preferem não editar (por exemplo, arquivos de terceiros).
Para usar presetdef
, adicione estas linhas no seu build.xml
arquivo de nível superior :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Agora todas as javac
tarefas subseqüentes serão herdadas essencialmente includeantruntime="false"
. Se seus projetos realmente precisam de bibliotecas ant runtime, você pode adicioná-los explicitamente aos arquivos de compilação OU ao conjunto includeantruntime="true"
. Este último também se livra dos avisos.
As javac
tarefas subsequentes ainda podem explicitamente alterar isso, se desejado, por exemplo:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Eu recomendo contra o uso ANT_OPTS
. Funciona, mas derrota o objetivo do aviso. O aviso informa que a construção de uma pessoa pode se comportar de maneira diferente em outro sistema. O uso ANT_OPTS
torna isso ainda mais provável, porque agora todo sistema precisa usar ANT_OPTS
da mesma maneira. Além disso, ANT_OPTS
aplicar-se-á globalmente, suprimindo os avisos à vontade em todos os seus projetos
presetdef
truque semelhante pode ser feito para trabalhar com tarefas Ant não integradas? Eu tentei fazer isso scalac
, mas como os build.xml
arquivos inferiores precisam definir manualmente a scalac
tarefa, eles substituem o que eu definir no nível superior.
Chet Hosey escreveu uma boa explicação aqui :
Historicamente, o Ant sempre incluía seu próprio tempo de execução no caminho de classe disponibilizado para a tarefa javac. Portanto, todas as bibliotecas incluídas no Ant e as bibliotecas disponíveis para o ant estão automaticamente no caminho de classe da sua compilação, quer você goste ou não.
Foi decidido que isso provavelmente não era o que a maioria das pessoas queria. Então agora há uma opção para isso.
Se você escolher "true" (para incluir o tempo de execução), pelo menos você saberá que seu caminho de classe de construção incluirá o tempo de execução do Ant. Se você escolher "false", estará aceitando o fato de que o comportamento da compilação será alterado entre versões anteriores e 1.8+.
Por mais irritado que esteja com esse aviso, você ficaria ainda menos feliz se suas construções quebrassem completamente. Manter esse comportamento padrão permite que arquivos de compilação não modificados funcionem consistentemente entre as versões do Ant.
A resposta de Daniel funciona perfeitamente. Aqui está um trecho de amostra que eu adicionei ao meu 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>
Se você gosta de mim, trabalhe na linha de comando, a resposta rápida está sendo executada
export ANT_OPTS=-Dbuild.sysclasspath=ignore
E, em seguida, execute seu script ant novamente.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
eu enfrentei o mesmo, eu check-in no programa e recurso. houve uma atualização de instalação para o jdk1.8 que não é compatível com a minha configuração antiga (jdk1.6.0) para ant no eclipse. Eu instalo essa atualização. No momento, meu projeto de formiga é construir sucesso.
Experimente, espero que isso seja útil.