Как запустить Java из Cygwin
Я пытаюсь написать сценарий BASH, чтобы запустить мою программу Java(общая проблема, верно?). Я просто не могу заставить его работать. После многих изменений, вот как я пытаюсь установить путь к классам, а затем выполнить программу:
java -classpath 'cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive
/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar:
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects
/Freereader/bin/"' com.free.syndication.SQLfeeder
извините за беспорядок, я просто пытаюсь сделать все сразу. Он говорит мне, что основной класс моей программы не может быть найден!((
какие идеи?
5 ответов
- Java classpath использует точку с запятой в качестве разделителя токенов.
- используйте backticks вместо одинарных кавычек
попробуй:
java -classpath `cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar;/cygdrive
/c/Projects/common/lib/jdom-1.0.jar;/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar;
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar;/cygdrive/c/Projects
/Freereader/bin/"` com.free.syndication.SQLfeeder
- в bash синтаксис
$(command)
яснее, чем backticks`command`
-
cygpath
есть-p
возможность преобразования значений, подобных пути (в отличие от имен одного пути) между Windows и Unix, т. е.-
cygpath -pu 'C:\Users\me\bin;C:\Users\me\project\bin'
даст/cygdrive/c/Users/me/bin:/cygdrive/c/Users/me/project/bin
-
cygpath -pw
будет делать то же самое в противоположном направлении
-
отметим, что cygpath -u "/cygdrive/c"
(как в вашем вопросе) ничего не изменится, так как имя каталога уже в нужном (Unix) синтаксисе. Вы могли бы и опустить его.
Итак, команда становится:
CP="C:/Projects/common/lib/rome-1.0.jar;C:/Projects/common/lib/jdom-1.0.jar;C:/Projects/common/lib/jsoup-1.6.1.jar;
C:/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar;C:/Projects
/Freereader/bin"
# for a Windows Java binary:
java -classpath "$(cygpath -pw "$CP")" com.free.syndication.SQLfeeder
# for a Unix Java binary:
java -classpath "$(cygpath -pu "$CP")" com.free.syndication.SQLfeeder
кроме того, вы можете начать с пути к классу в стиле Unix, но команды остаются неизменными. В любом случае вы можете, конечно, опустить вызов cygpath, если путь к классу уже находится в нужном синтаксисе.
вам не нужны backticks?
java -classpath `cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive
/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar:
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects
/Freereader/bin/"` com.free.syndication.SQLfeeder
- вы должны использовать backticks ("'symbol) или $(cmd) bash sytax для замены вывода cmd
- java не понимает пути стиля unix - (cygwin -), только стиль windows.
и наконец первая ссылка в google ответы Вопрос
основной причиной проблемы является не backtic, а вместо этого проблема двоеточия против двоеточия. Поскольку в cygwin java работает для среды DOS / Windows, она ожидает ';' в качестве разделителя пути.
хотя backtic действительно помогает, основной причиной проблемы должно быть подчеркнуть разницу между": "и";", когда Java находится в Unix или в среде Windows.