Как запустить 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

  1. вы должны использовать backticks ("'symbol) или $(cmd) bash sytax для замены вывода cmd
  2. java не понимает пути стиля unix - (cygwin -), только стиль windows.

и наконец первая ссылка в google ответы Вопрос


основной причиной проблемы является не backtic, а вместо этого проблема двоеточия против двоеточия. Поскольку в cygwin java работает для среды DOS / Windows, она ожидает ';' в качестве разделителя пути.

хотя backtic действительно помогает, основной причиной проблемы должно быть подчеркнуть разницу между": "и";", когда Java находится в Unix или в среде Windows.