Otrzymuję następujące ostrzeżenie:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Co to znaczy?
Otrzymuję następujące ostrzeżenie:
[javac] build.xml:9: warning: 'includeantruntime' was not set,
defaulting to build.sysclasspath=last; set to false for repeatable builds
Co to znaczy?
Odpowiedzi:
Po prostu ustaw includeantruntime="false"
:
<javac includeantruntime="false" ...>...</javac>
Jeśli musisz użyć opcji javac
-task wiele razy, możesz rozważyć użycie tej opcji PreSetDef
do zdefiniowania własnego javac
zadania, które zawsze ustawia includeantruntime="false"
.
From http://www.coderanch.com/t/503097/tools/warning-includeantruntime-was-not-set :
Jest to spowodowane błędem wprowadzonym w Ant 1.8. Po prostu dodaj atrybut tej nazwy do zadania javac, ustaw go na false i zapomnij, że to się kiedykolwiek zdarzyło.
Od http://ant.apache.org/manual/Tasks/javac.html :
Określa, czy uwzględnić biblioteki wykonawcze Ant w ścieżce klasy; domyślnie jest tak, chyba że ustawiono build.sysclasspath. Zazwyczaj najlepiej jest ustawić wartość false, aby zachowanie skryptu nie było wrażliwe na środowisko, w którym jest uruchamiane.
Jak wspomniał @Daniel Kutik, presetdef
to dobra opcja. Zwłaszcza jeśli ktoś pracuje nad projektem z wielomabuild.xml
plikami, których nie możesz lub wolisz nie edytować (np. Pliki stron trzecich).
Aby użyć presetdef
, dodaj te linie do build.xml
pliku najwyższego poziomu :
<presetdef name="javac">
<javac includeantruntime="false" />
</presetdef>
Teraz wszystkie kolejne javac
zadania będą w zasadzie dziedziczone includeantruntime="false"
. Jeśli twoje projekty rzeczywiście potrzebują bibliotek uruchomieniowych ant, możesz albo dodać je jawnie do plików kompilacji LUB zestawuincludeantruntime="true"
. Ci ostatni również pozbędą się ostrzeżeń.
Kolejne javac
zadania mogą w razie potrzeby jawnie to zmienić, na przykład:
<javac destdir="out" includeantruntime="true">
<src path="foo.java" />
<src path="bar.java" />
</javac>
Odradzam używanie ANT_OPTS
. Działa, ale pokonuje cel ostrzeżenia. Ostrzeżenie mówi, że kompilacja może zachowywać się inaczej w innym systemie. Używanie ANT_OPTS
czyni to jeszcze bardziej prawdopodobnym, ponieważ teraz każdy system musi korzystać ANT_OPTS
z tego samego sposobu. Ponadto, ANT_OPTS
będzie obowiązywać globalnie, tłumiąc ostrzeżenia popadnie we wszystkich swoich projektach
presetdef
sztuczkę w przypadku niewbudowanych zadań Ant? Próbowałem tego z scalac
, ale ponieważ build.xml
pliki w dolnej części muszą ręcznie zdefiniować scalac
zadanie, zastępują wszystko, co ustawiłem na najwyższym poziomie.
Chet Hosey napisał ładne wyjaśnienie tutaj :
Historycznie, Ant zawsze zawierał swój własny środowisko wykonawcze w ścieżce klas udostępnionej dla zadania javac. Tak więc wszystkie biblioteki dołączone do Anta i wszystkie biblioteki dostępne dla Anta, są automatycznie w ścieżce klas twojej kompilacji, czy ci się to podoba, czy nie.
Zdecydowano, że prawdopodobnie nie tego chciała większość ludzi. Więc teraz jest na to opcja.
Jeśli wybierzesz „true” (dla includeantruntime), to przynajmniej wiesz, że twoja ścieżka klas kompilacji będzie zawierać środowisko uruchomieniowe Ant. Jeśli wybierzesz „fałsz”, akceptujesz fakt, że zachowanie kompilacji zmieni się między starszymi wersjami a wersją 1.8+.
Jakkolwiek irytujesz się tym ostrzeżeniem, byłbyś jeszcze mniej szczęśliwy, gdyby twoje kompilacje całkowicie się zepsuły. Zachowanie tego domyślnego zachowania pozwala niezmodyfikowanym plikom kompilacji na spójną pracę między wersjami Ant.
Odpowiedź Daniela działa idealnie. Oto przykładowy fragment, który dodałem do mojego pliku 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>
Jeśli podoba mi się, że pracuję z linii poleceń, wykonuje się szybką odpowiedź
export ANT_OPTS=-Dbuild.sysclasspath=ignore
A następnie ponownie uruchom skrypt ant.
set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore
.
stawiałem czoła temu samemu, sprawdzam program i funkcję. pojawiła się aktualizacja dla jdk1.8, która nie jest kompatybilna z moim starym ustawieniem (jdk1.6.0) dla mrówki w środowisku eclipse. Instaluję tę aktualizację. w tej chwili moim projektem mrówki jest budowanie sukcesu.
Spróbuj, mam nadzieję, że będzie to pomocne.