[java, ant, javac] как скомпилить юзая другую папку сурцов

pitrik2

есть две папки сурцов
global_src
my_src
global_srс целиком не компилится, перечислять все классы которые компилятся очень гиморно
my_src компилится вместе с global_src
т.е. например если <javac> указать два сурца, то он автоматом подцепит все нужные .java файлы из global_src
но проблема такая, что на выход попадают .class файлы из global_src
как этого избежать?

katrin2201

а откуда она узнает, какие классы пихать какие не пихать?
можно конечно написать утилитку или даже найти готовую, которая будет вычищать из джарников unused classes ходя по графу импортов, но в общем случае решение не катит, ибо рефлекшен идет мимо импортов.

pitrik2

а откуда она узнает, какие классы пихать какие не пихать?
ээ
а в чем проблема?
все .class которые получились из my_src пихать
все .class которые получились не из my_src не пихать
можно конечно написать утилитку или даже найти готовую, которая будет вычищать из джарников unused classes ходя по графу импортов, но в общем случае решение не катит, ибо рефлекшен идет мимо импортов.
это не моя задача
мне никакой unused не надо

kokoc88

все .class которые получились не из src не пихать
Тогда не понятно, откуда брать их в рантайме.

pitrik2

вроде придумал решение!
компилим всё в одну папку
потом компилим в другую папку только src юзая класспасом предыдущую компиляцию!
осталась одна загвоздка
как при компиляции всего указать "начальными" только файлы из src папки?

<javac>
  <src path="my_src" />
  <src path="global_src" />

  <include ? />
</javac>

что вместо ? поставить?
вот так не работает:

<javac>
  <src path="my_src" >
    <include name="**/*">
  </src>
  <src path="global_src">
    <exclude name="**/*">
  </src>
</javac>

:(

pitrik2

Тогда не понятно, откуда брать их в рантайме.
а мне они тама не нужны
ну тойсть в данном случае эта задача не стоит

pitrik2

что вместо ? поставить?
аееееееееее
получилось!
вот ответ на изначлаьный пост:

<javac destdir="tmp">
<src path="my_src" />
<sourcepath path="global_src" />
</javac>

<javac destdir="out">
<src path="my_src" />
<classpath>
<dirset dir="tmp"/>
</classpath>
</javac>

katrin2201

тогда понятно
токо непонятно my_src зачем первый раз совать в компайл? разве глобал_срс от него зависит?

pitrik2

тогда понятно
токо непонятно my_src зачем первый раз совать в компайл? разве глобал_срс от него зависит?
ну я же в первом посте объяснил
смотри
джава компилятор "рюхает зависимости"
вот он начинает компилить файл, смотрит что там импортируется другой класс и начинает по всем указанным сурцам этот файл искать
находит и тоже компилит
global_src сам полностью мы не компилим, мы первым проходом компилим из него только те файлы которые импортируются в my_src
т.е. my_src в первый раз указывается чтобы это дерево зависимостей обработалось
global_src:
A.java - компилится
B.java - не компилится, там какой-то кривой код
my_src:
C.java (в файле есть import A;)
первым проходом мы получим
A.class
C.class
вторым проходом мы получим
C.class
если первым проходом my_src не указать
то первым проходом не получим ни одного класса, зато получим компайлер эррор: B.java содержит ошибки

katrin2201

Ааааа =) Вот теперь наконец дошло =)
В первом посте просто как то замылено что в global_src код с ашипками, я и понять не мог что за танцы с бубном

SPARTAK3959

Можно еще попробовать failonerror=false. Возможно ant не остановит компиляцию остальных классов после ошибок компиляции.
Оставить комментарий
Имя или ник:
Комментарий: