mrówka ostrzeżenie: „nie włączono„ includeantruntime ”

397

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?

użytkownik496949
źródło

Odpowiedzi:

388

Środowisko wykonawcze Ant

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 PreSetDefdo zdefiniowania własnego javaczadania, które zawsze ustawia includeantruntime="false".

Dodatkowe Szczegóły

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.

Daniel Kutik
źródło
Wersja 1.8.2 Apache Ant (TM) skompilowana 20 grudnia 2010 r.
496949
więc jeśli potrzebujesz środowiska uruchomieniowego mrówki w ścieżce klasy, ustaw go na tak / prawda, w przeciwnym razie na nie / fałsz. Chyba nie potrzebujesz tego.
Daniel Kutik
5
+1, świetna odpowiedź. I tylko szkoda, że nie mogłem ustawić raz gdzieś w buildfile zamiast zaśmiecanie każde wezwanie javac z nim ...
Jonik
1
Co to jest w każdym razie, że jest ustawione na True?
Lorenzo Lerate
„Określa, czy biblioteki środowiska wykonawczego Ant mają być dołączone do ścieżki klasy; wartość domyślna to„ Tak ”, chyba że ustawiono opcję build.sysclasspath. Zazwyczaj najlepiej jest ustawić wartość false, aby zachowanie skryptu nie było wrażliwe na środowisko, w którym jest uruchamiane. „
Daniel Kutik,
72

Jak wspomniał @Daniel Kutik, presetdefto 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.xmlpliku najwyższego poziomu :

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

Teraz wszystkie kolejne javaczadania 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 javaczadania 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_OPTSczyni to jeszcze bardziej prawdopodobnym, ponieważ teraz każdy system musi korzystać ANT_OPTSz tego samego sposobu. Ponadto, ANT_OPTSbędzie obowiązywać globalnie, tłumiąc ostrzeżenia popadnie we wszystkich swoich projektach

jwfearn
źródło
1
Działa doskonale do modernizacji istniejącego pliku kompilacji Anta z wieloma zadaniami javac. Element presetdef przechodzi bezpośrednio do elementu projektu.
saxman
@jwfearn: Czy można zastosować podobną presetdefsztuczkę w przypadku niewbudowanych zadań Ant? Próbowałem tego z scalac, ale ponieważ build.xmlpliki w dolnej części muszą ręcznie zdefiniować scalaczadanie, zastępują wszystko, co ustawiłem na najwyższym poziomie.
Stuart Golodetz
2
Uwaga: użycie presetdef spowoduje, że mrówka ostrzeże, że zadanie javac zostało ponownie zdefiniowane. Addind includeantruntime do każdego zadania javac unika tego. Nie jestem świadomy wad ostrzeżenia. Ale może to być przydatne dla osób, które „potrzebują” czystych wersji.
mikijov
Tak, presetdef podaje „Próbuję zastąpić starą definicję zadania javac”
Mike Jones,
62

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.

kgiannakakis
źródło
3
Zawsze myślałem, że to najgłupsza funkcja / wiadomość w historii. Kto chce „powtarzalnych kompilacji” w swoim narzędziu do zarządzania konfiguracją? ;)
karmakaze
1
Ta odpowiedź wydaje się być jedyną, która mówi nam, co tak naprawdę oznacza ostrzeżenie.
ty
26

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>
Krishnam Raju
źródło
5

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.

slott
źródło
To mi bardzo pomaga . Używam set ANT_OPTS=-Xms40M -Xmx512M -Dbuild.sysclasspath=ignore.
Paul Vargas
5

Posługiwać się <property name="build.sysclasspath" value="last"/> w pliku build.xml

Aby uzyskać więcej informacji, wyszukaj includeAntRuntimew Ant javac

Inne możliwe wartości można znaleźć tutaj

Ahmad Nadeem
źródło
-3

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.

Garun Kumar Mishra
źródło