2015-06-15 5 views
2

Я написал код, который опирается на другой проект, который я включил в мой путь сборки. Проблема, с которой я сталкиваюсь, заключается в том, что в другом проекте есть ссылка на некоторые файлы XSL, и к ним обращаются с использованием относительного пути ./xlst/.Java Hardcoded Относительный путь к файлу

Я имел дело с этим в своей локальной рабочей области, просто скопировав папку xlst в свой проект. В то время все было подливкой. Тем не менее, у меня теперь JARred это и поместил его на сервер, я не думаю, что он будет заглядывать в JAR для относительного пути!

Вот что вы найдете в журнале ошибок для уточнения (обратите внимание на путь):

ERROR: 'Could not compile stylesheet' 
FATAL ERROR: 'Could not compile stylesheet' 
      :c:\logs\.\xslt\Transform.xsl (The system cannot find the path specified) 

Мой вопрос заключается в следующем: я вижу, что он автоматически начал искать в C: \ Logs (ака Текущий рабочий Directory), а затем добавили относительный путь, могу ли я заставить его начать где-то, кроме c: \ logs, чтобы он выглядел в правильной папке, где я могу зайти в XSL-файлы?

Редактировать: Я попытался добавить файл f = новый файл («c:/myPathToXsltFolder /») непосредственно перед моим вызовом другому методу проекта, чтобы увидеть, повлияет ли он на путь «Текущая рабочая директория», t, похоже, влияет на него.

P.S. Мне нужно сделать это без изменения другого проекта, поэтому не могу использовать предложение об изменении относительного пути к getClass(). GetResource (name).

+0

Вы видели этот вопрос/ответ http://stackoverflow.com/questions/3844307/how-to-read-text-file-from-relative-path-in-a-project –

+0

@MauricioGracia Спасибо за ссылку, Я рассмотрел ответ на этот вопрос, который говорит, чтобы изменить ссылку относительного пути на getClass(). GetResource («ListStopWords.txt»); - однако это требует от меня изменить код проекта OTHER, который я не могу сделать. Однако теперь, когда я знаю, что терминология «Текущий рабочий каталог», я могу просмотреть некоторые другие сообщения, например http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java – Kairan

+0

, пожалуйста, поделитесь некоторыми вашего кода, потому что, когда вы говорите «до вызова другого метода проекта, неясно, что вы имеете в виду –

ответ

0

Все пути в Java относятся к свойству user.dir, которое вы можете установить при запуске JVM с помощью -Duser.dir=<path>. Тем не менее это влияет на всю программу, и все пути будут относиться к указанному вами пути вместо c:\logs, как вы говорите.

Использование относительных путей - не очень хорошая идея, поэтому большинство вещей используют настраиваемые свойства или ресурсы и изменение user.dir, вероятно, не повлияет ни на что другое. Но так как вы помещаете вещи на сервер, тогда этот сервер (если это веб-сервер Java, а не просто серверная машина) может ожидать определенный макет под папкой пользователя. В этом случае, я думаю, вы должны проверить свои проблемы.

+0

Я согласен. Я думаю, что это было решение, которое я искал. нашел некоторую информацию, которую я также могу использовать в своем Java-коде, чтобы установить путь непосредственно перед вызовом внешнего метода в другом проекте. http://www.javacodex.com/Files/Set-The-Current-Working-Directory – Kairan

+0

Это правда, что свойства системы могут быть установленным во время выполнения, но если вы это сделаете, вы потеряете возможность взглянуть на командную строку и узнать, как настроена JVM. Это полезно при настройке развертываний и других задач sysadmin. Если вы делаете все, то это менее актуально, пока что-то не пройдет, и вы станете незнакомцем с вашей настройкой. :) – m4ktub

Смежные вопросы