Когда команда "jar" откажется добавлять класс в файл .jar? - PullRequest
3 голосов
/ 29 сентября 2010

Всего у меня 204 класса (большинство классов - внутренние).В течение нескольких месяцев я прекрасно работал с SCons (SCons просто вызывает команду jar).

По какой-то причине он перестал добавлять последний внутренний класс для определенного класса.Например, предположим, что у меня есть следующие классы:

class1
class2
class3
class4
class5
class6
...
class79
class80

Перед этим последним изменением, SCons прекрасно все испортил бы.Но СЕЙЧАС ... он специально не добавляет class80 к своей команде jar.(Я вижу упущение class80 в команде jar).

Есть ли случай, когда команда jar просто игнорирует определенные классы?

----------- EDIT.Я нашел виновника.Почему-то этот внутренний класс не распознается моими SCons!

vehicleFilter = new RowFilter<Object, Object>(){ 
public boolean include(Entry<? extends Object, ? extends Object> entry)                {                                                 
    {return false;}  
};

Ответы [ 3 ]

2 голосов
/ 06 мая 2011

Вам необходимо добавить JAVAVERSION='1.6' в качестве аргумента для вашего env.Java() вызова:

env.Java(target='classes', source='src', JAVAVERSION='1.6')

Без этого, если вы компилируете с текущим javac, SCons не определит правильные имена для анонимных внутренних классов, поэтому, когда эти плохие имена файлов классов будут переданы jar, произойдет сбой. 1008 *

1 голос
/ 30 сентября 2010

Вместо того, чтобы передавать весь список файлов классов команде Jar, вы можете передать каталог.Это позволяет избежать проблем с анализатором java SCons, так как SCons сканирует каталог на наличие файлов и собирает все найденные файлы.

Что-то вроде следующего скомпилирует файлы в «src» в каталог «classes», а затем создаст jarиз содержимого "classes":

env = Environment(tools=['javac', 'jar'])
env.Java(target='classes', source='src')
env.Jar(target='foo.jar', source=['classes', 'Manifest.txt'],
        JARCHDIR='$SOURCE')

Файл манифеста "Manifest.txt" находится в корне вашего проекта здесь.Единственное требование заключается в том, что он начинается с текста «Manifest-Version».

0 голосов
/ 29 сентября 2010

SCons может создать командную строку, перечислив все классы, которые будут ее использовать, и это может оказаться слишком длинным (ограничение платформы или эвристика внутри SCons).

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

Есть какая-то конкретная причина, по которой вы не просто используете муравья?

...