Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вы хотите вызывать
, а не выполнять
. Небольшой отрывок из моего собственного кода, показывающий, как передавать переменные:
namespace :clients do
task :create, [:client] => ["clients:creation:checks"] do |t, args|
Rake::Task["clients:creation:git"].invoke(client, password)
Rake::Task["server:virtualhost:create"].invoke(client)
Rake::Task["server:virtualhost:enable"].invoke(client)
Rake::Task["server:reload"].invoke
Rake::Task["db:roles:create"].invoke(client, password)
Rake::Task["db:create"].invoke(client, client)
Rake::Task["db:migrate"].invoke(client)
end
end
В качестве альтернативы, вы можете сделать задачу зависимой от другой задачи, как я сделал выше с помощью : create
в зависимости от клиентов: создание: проверяет
.
Чтобы уточнить, пространство имен предназначено для группировки задач, поэтому вы должны фактически определить задачи в пространстве имен, как я сделал выше. Вы не можете просто вызывать задачи из пространства имен.
Итак, ваш код выше должен быть:
desc 'This rebuilds development db'
task :rebuild_dev do
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:load"].invoke
end
Вы можете сделать это с зависимостями от задачи без тела.
desc 'This rebuilds development db'
task :rebuild_dev => ["db:drop", "db:create", "db:migrate", "db:load"]
namespace :rebuild_dev do
desc 'This rebuilds development db'
task :clean_slate => :environment do
Rake::Task["db:drop"].invoke
Rake::Task["db:create"].invoke
Rake::Task["db:migrate"].invoke
Rake::Task["db:load"].invoke
end
end