Перейти к содержимому

Как запустить jar файл в powershell

  • автор:

Запуск файла jar из powershell

Я хочу запустить jar-файл из powershell. До сих пор я смог найти это:

Start-Process -FilePath java -ArgumentList '-jar Upload_Download.jar FilePickupPath= $pickuppath FileDownloadPath= $download' -PassThru -RedirectStandardError E:\stderr.txt 

Каким-то образом это не работает. Есть предложения?

Поделиться Источник 12 января 2017 в 08:50

4 ответа

Powershell имеет несколько символов строковых кавычек, которые ведут себя по-разному. Двойная кавычка » позволяет проводить оценки внутри строки, в то время как одинарная кавычка ‘ не делает этого.

В качестве практического примера:

$foo=42 write-host "The foo: $foo" # Prints The foo: 42 write-host 'The foo: $foo' # Prints The foo: $foo 

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

Start-Process -FilePath java ` -ArgumentList '-jar Upload_Download.jar FilePickupPath= $pickuppath fileDownloadPath= $download' ` -PassThru -RedirectStandardError E:\stderr.txt 

Это передаст буквально $pickuppath и $download . Намерение, вероятно, передаст $pickuppath и $download значения.

Для решения проблемы используйте двойные кавычки.

Поделиться 12 января 2017 в 09:07

Прохождение аргументов часто является проблемой, поэтому я использую массив,

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

if(-not $env:JAVA_HOME) < Write-Error "JAVA_HOME not set" break >$params = @< FilePath = [string]::Format("\bin\java.exe",$env:JAVA_HOME) WorkingDirectory = "D:\SDL\Web\live\discovery\config\" ArgumentList = @("-jar", "discovery-registration.jar", "update") RedirectStandardError = "c:\temp\JavaError.txt" PassThru = $true Wait = $true > $p = Start-Process @params if($p.ExitCode -eq 0) < Write-Output "Discovery Registration complete" >else

Поделиться 16 июля 2018 в 10:10

Моя проблема была немного другой, потому что есть две версии jre и одна установлена jdk, и powershell всегда получал исполняемый файл java на основе jre и не получал сообщение

C:\Program Files\Java\jre1.8.0_73 is not a valid JDK Java Home. 

Хотя jdk был установлен и переменная JAVA_HOME была установлена и из переменной отображался путь к jdk правильно.

> $env:JAVA_HOME C:\Program Files\Java\jdk1.8.0_73 

Я сохранил путь к исполняемому файлу jdk в переменной, перешел в каталог, содержащий файл jar для веб-логического сервера, и вызвал программу установки, используя следующий код.

 $java="C:\Program Files\Java\jdk1.8.0_73\bin\java" Start-Process -FilePath $java -ArgumentList '-jar fmw_12.2.1.3.0_infrastructure_generic.jar' 

Программа установки открылась через несколько секунд. Я опустил переключатель -RedirectStandardErro, чтобы сохранить команду маленькой и простой, хотя я использовал его для улавливания ошибок в первую очередь.

Я попытался использовать переменную $fmw для хранения файла jar fmw_12.2.1.3.0_infrastructure_generic.jar , но это не сработало. Неудачный код выглядит следующим образом

$fmw="fmw_12.2.1.3.0_infrastructure_generic.jar" Start-Process -FilePath $java -ArgumentList '-jar $fmw' 

Я надеюсь, что это поможет кому-то и кто-то может предоставить мне лучший и чистый метод для вызова jar-файлов в powershell.

Поделиться 19 сентября 2017 в 07:12

Когда вы запускаете команду после определения переменной $java, убедитесь, что помещаете полный путь к jar в двойные кавычки внутри одинарных кавычек. Это позволяет исправить ошибку, которая возникает, когда путь к файлу содержит пробел.

Другой вариант — перейти в папку с jar и запустить команду таким образом, как предложено в вышеприведенном ответе. Это также работает и полезно с простыми путями.

Также при определении переменной Java попробуйте поместить путь к исполняемому файлу, а не просто к папке. Это предотвращает конфликты выполнения, если пути похожи.

Батник запуска Java из оболочки Powershell

Author24 — интернет-сервис помощи студентам

Батник для запуска игры и батник для выхода с нее
Нужен батник который будет открывать игру( ну это изи), только открытие в свернутом режиме.Так же.

Перевод команды powershell в батник
приветствую. может кто поможет. есть команда для powershell — Get-AppxProvisionedPackage -path.

Почему не запускается PowerShell скрипт через батник?
Создал батник который запускает такой powershell скрипт: dir C:\Users\home64\Downloads\1a -file.

Батник запуска скрипта в 22:00
Добрый вечер. Посоветовали батник запуска скрипта vbs в 22:00. Название: Report.bat.

496 / 149 / 49
Регистрация: 27.02.2016
Сообщений: 763

из джавы что нибудь еще запускаете ? питон (jython) или руби (jruby) ? луа думаю тоже можно

в сундуке — заяц, в зайце — утка, в утке — яйцо, в яйце — игла, — смерть Кощея

Регистрация: 21.01.2017
Сообщений: 20

ЦитатаСообщение от skouzmine Посмотреть сообщение

из джавы что нибудь еще запускаете ? питон (jython) или руби (jruby) ? луа думаю тоже можно
в сундуке — заяц, в зайце — утка, в утке — яйцо, в яйце — игла, — смерть Кощея

нет. вся работа происходит в powershell
496 / 149 / 49
Регистрация: 27.02.2016
Сообщений: 763

вы же сами сказали что вам надо батник в котором зовется повершелл в котором запускается ява
я толькло предположил что там может быть дальше

Регистрация: 21.01.2017
Сообщений: 20

ЦитатаСообщение от skouzmine Посмотреть сообщение

вы же сами сказали что вам надо батник в котором зовется повершелл в котором запускается ява
я толькло предположил что там может быть дальше

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

5716 / 1894 / 319
Регистрация: 10.12.2013
Сообщений: 6,641

создать ырлык можно для любого исполняемого файла, батник не нужен.

исполняемым файлом в данном случае будет либо powershell.exe ( для версии 5.1 ), либо pwsh.exe (для версии 7 )

powershell.exe -noexit -EP Bypass -File c:\users\user\Your.Script.File.PS1

Регистрация: 21.01.2017
Сообщений: 20
а как сделать, чтобы в открываемом окне сразу была прописана команда java -jar PinCrawl.jar ?
5716 / 1894 / 319
Регистрация: 10.12.2013
Сообщений: 6,641
Your.Script.File.PS1

java -jar PinCrawl.jar

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Батник для запуска 1С
Необходимо написать батник для запуска 1С и корректного завершения RDP сессии на удаленной машине.

Батник запуска MYSQL
мой батник запускает Mysql, я хочу что бы при запуске батника мускул запускался, а окно.

Батник для перемещения и запуска проги
Привет Помогите создать батник который будет сначала копировать файл (который находится в одной.

Батник для последовательного запуска программ
Добрый вечер! Вот один вариант файла: "C:\Users\SKA43\AppData\Roaming\uTorrent\uTorrent.exe".

После запуска стороннего приложения батник не работает
После запуска стороннего приложения батник не работает(не выполняет остальные команды) Код.

Написать батник для удалённого запуска программы
Товарищи программисты, подскажите пожалуйста, можно ли через батник удалённо запустить программу на.

Или воспользуйтесь поиском по форуму:

Включение всех jar-файлов в директории в classpath Java

Одной из распространенных задач, с которой сталкиваются разработчики на Java, является включение всех jar-файлов в директории в classpath. Это может быть необходимо, например, при запуске программы из командной строки. При этом могут возникать проблемы с обнаружением классов, которые точно находятся в этих jar-файлах.

Примером может служить следующая ситуация. Предположим, в директории lib находится набор jar-файлов, которые нужно включить в classpath. Может возникнуть искушение использовать подход со «звездочкой» и указать путь к jar-файлам в classpath следующим образом: java -classpath lib/*.jar:. .

Однако, такой подход не приведет к желаемому результату, поскольку Java не поддерживает использование «звездочки» для включения всех jar-файлов из директории. Вместо этого, каждый jar-файл необходимо добавить в classpath отдельно.

Этот процесс может быть упрощен с помощью скрипта на bash или PowerShell, который сгенерирует необходимую строку classpath. Например, в bash это можно сделать с помощью следующего скрипта:

for file in $(ls lib/*.jar) do CLASSPATH=$CLASSPATH:$file done

В PowerShell аналогичный скрипт будет выглядеть так:

foreach ($file in Get-ChildItem lib\*.jar)

Таким образом, для включения всех jar-файлов из директории в classpath в Java, каждый jar-файл необходимо добавить в classpath отдельно. Этот процесс можно автоматизировать с помощью скрипта на bash или PowerShell.

Работа с Java в командной строке

Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.

От простого к .

Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.

Один файл

Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.

public class HelloWorld < public static void main(String[] args) < System.out.println("Hello World!"); >>

Переходим в каталог, где лежит данный файл, и выполняем команды.

javac HelloWorld.java 

В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить

java -classpath . HelloWorld
Отделяем бинарные файлы от исходников

Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем

javac -d bin src/HelloWorld.java 

Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.

java -classpath ./bin HelloWorld
Используем пакеты

А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.

Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку

package com.qwertovsky.helloworld; 

В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем

javac -d bin src/com/qwertovsky/helloworld/HelloWorld.java 

В каталоге bin автоматически создастся структура каталогов как и в src.

 HelloWorld '---bin ' '---com ' '---qwertovsky ' '---helloworld ' '---HelloWorld.class '---src '---com '---qwertovsky '---helloworld '---HelloWorld.java 
java -classpath ./bin com.qwertovsky.helloworld.HelloWorld
Если в программе несколько файлов
HelloWorld.java
package com.qwertovsky.helloworld; public class HelloWorld < public static void main(String[] args) < int a=2; int b=3; Calculator calc=new Calculator(); System.out.println("Hello World!"); System.out.println(a+"+"+b+" java">package com.qwertovsky.helloworld; import com.qwertovsky.helloworld.operation.Adder; public class Calculator < public int sum(int. a) < Adder adder=new Adder(); for(int i:a) < adder.add(i); >return adder.getSum(); > >
Adder.java
package com.qwertovsky.helloworld.operation; public class Adder < private int sum; public Adder() < sum=0; >public Adder(int a) < this.sum=a; >public void add(int b) < sum+=b; >public int getSum() < return sum; >>

Компилируем

javac -d bin src/com/qwertovsky/helloworld/HelloWorld.java src\com\qwertovsky\helloworld\HelloWorld.java:9: cannot find symbol symbol : class Calculator location: class com.qwertovsky.helloworld.HelloWorld Calculator calc=new Calculator(); ^ src\com\qwertovsky\helloworld\HelloWorld.java:9: cannot find symbol symbol : class Calculator location: class com.qwertovsky.helloworld.HelloWorld Calculator calc=new Calculator(); ^ 2 errors 

Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
Компилируем

javac -sourcepath ./src -d bin src/com/qwertovsky/helloworld/HelloWorld.java 
java -classpath ./bin com.qwertovsky.helloworld.HelloWorld Hello Word 2+3=5 

Если удивляет результат

Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.

javac -g -sourcepath ./src -d bin src/com/qwertovsky/helloworld/HelloWorld.java 

Запускаем отладчик

jdb -classpath bin -sourcepath src com.qwertovsky.helloworld.HelloWorld Initializing jdb . > 

Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе Calculator

> stop at com.qwertovsky.helloworld.Calculator:9 Deferring breakpoint com.qwertovsky.helloworld.Calculator:9. It will be set after the class is loaded. 

Запускаем на выполнение.

> run run com.qwertovsky.helloworld.HelloWorld Set uncaught java.lang.Throwable Set deferred uncaught java.lang.Throwable > VM Started: Set deferred breakpoint com.qwertovsky.helloworld.Calculator:9 Hello World! Breakpoint hit: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=9 bci=0 9 Adder adder=new Adder(); 

Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.

main[1] list 5 public class Calculator 6 < 7 public int sum(int. a) 8 < 9 =>Adder adder=new Adder(); 10 for(int i:a) 11 < 12 adder.add(i); 13 >14 return adder.getSum(); 

Узнаем, что из себя представляет переменная а.

main[1] print a a = instance of int[2] (id=340) main[1] dump a a = < 2, 3 >main[1] stop at com.qwertovsky.helloworld.operation.Adder:19 Deferring breakpoint com.qwertovsky.helloworld.operation.Adder:19. It will be set after the class is loaded. 

Продолжим исполнение.

main[1] cont > Set deferred breakpoint com.qwertovsky.helloworld.operation.Adder:19 Breakpoint hit: "thread=main", com.qwertovsky.helloworld.operation.Adder.add(), line=19 bci=0 19 sum+=b; main[1] list 15 > 16 17 public void add(int b) 18 < 19 =>sum+=b; 20 > 21 22 public int getSum() 23 < 24 return sum; main[1] print sum sum = 0 main[1] print b b = 2 

Выполним код в текущей строке и увидим, что sum стала равняться 2.

main[1] step > Step completed: "thread=main", com.qwertovsky.helloworld.operation.Adder.add(), line=20 bci=10 20 > main[1] print sum sum = 2 

Поднимемся из класса Adder в вызвавший его класс Calculator.

main[1] step up > Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=10 bci=36 10 for(int i:a) 

Удаляем точку прерывания

main[1] clear com.qwertovsky.helloworld.operation.Adder:19 Removed: breakpoint com.qwertovsky.helloworld.operation.Adder:19 main[1] step > Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=12 bci=30 12 adder.add(i); 

Можно избежать захода в методы, используя команду next.

main[1] next > Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=10 bci=36 10 for(int i:a) main[1] next > Step completed: "thread=main", com.qwertovsky.helloworld.Calculator.sum(), line=14 bci=42 14 return adder.getSum(); 

Проверяем значение выражения и завершаем выполнение.

main[1] eval adder.getSum() adder.getSum() = 5 main[1] cont > 2+3=5 The application exited 

Хорошо бы протестировать

Используем JUnit.

package com.qwertovsky.helloworld; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized.Parameters; @RunWith(value=org.junit.runners.Parameterized.class) public class TestCalculator < int expected; int[] arg; @Parameters public static Collectionparameters() < return Arrays.asList(new int[][][]< , > ,,> ,,> ,,<>> >); > public TestCalculator(int[] expected, int[] arg) < this.expected=expected[0]; this.arg=arg; >@Test public void testSum() < Calculator c=new Calculator(); assertEquals(expected,c.sum(arg)); >>

Компилируем

mkdir test_bin javac -classpath lib/path/junit-4.8.2.jar -sourcepath ./src -d test_bin test/com/qwertovsky/helloworld/TestCalculator.java 

Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ';', в Linux — ':'. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ';', но он воспринимается как разделитель команд.

java -classpath lib/path/junit-4.8.2.jar:./test_bin org.junit.runner.JUnitCore com.qwertovsky.helloworld.TestCalculator JUnit version 4.8.2 . Time: 0,031 OK (4 tests) 

Создадим библиотеку

Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.

 HelloWorld '---bin '---src '---com '---qwertovsky '---helloworld '---HelloWorld.java Сalculator '---bin '---src ' '---com ' '---qwertovsky ' '---calculator ' '---Calculator.java ' '---operation ' '---Adder.java '---test '---com '---qwertovsky '---calculator '---TestCalculator.java 

Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку

import com.qwertovsky.calculator.Calculator; 

Компилируем.

cd Calculator javac -sourcepath src -d bin src/com/qwertovsky/calculator/Calculator.java 

Делаем архив jar

jar cvf calculator.jar -C bin . added manifest adding: com/(in = 0) (out= 0)(stored 0%) adding: com/qwertovsky/(in = 0) (out= 0)(stored 0%) adding: com/qwertovsky/calculator/(in = 0) (out= 0)(stored 0%) adding: com/qwertovsky/calculator/Calculator.class(in = 497) (out= 373)(deflated 24%) adding: com/qwertovsky/calculator/operation/(in = 0) (out= 0)(stored 0%) adding: com/qwertovsky/calculator/operation/Adder.class(in = 441) (out= 299)(deflated 32%) 

С помощью ключа -C мы запустили программу в каталоге bin.

Надо узнать, что у библиотеки внутри

Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.

javap -c -classpath calculator.jar com.qwertovsky.calculator.Calculator Compiled from "Calculator.java" public class com.qwertovsky.calculator.Calculator extends java.lang.Object< public com.qwertovsky.calculator.Calculator(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."":()V 4: return public int sum(int[]); Code: 0: new #2; //class com/qwertovsky/calculator/operation/Adder 3: dup 4: invokespecial #3; //Method com/qwertovsky/calculator/operation/Adder."":()V 7: astore_2 8: aload_1 9: astore_3 10: aload_3 11: arraylength 12: istore 4 14: iconst_0 15: istore 5 17: iload 5 19: iload 4 21: if_icmpge 42 24: aload_3 25: iload 5 27: iaload 28: istore 6 30: aload_2 31: iload 6 33: invokevirtual #4; //Method com/qwertovsky/calculator/operation/Adder.add:(I)V 36: iinc 5, 1 39: goto 17 42: aload_2 43: invokevirtual #5; //Method com/qwertovsky/calculator/operation/Adder.getSum:()I 46: ireturn >

Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).

javap -private -classpath calculator.jar com.qwertovsky.calculator.operation.Adder Compiled from "Adder.java" public class com.qwertovsky.calculator.operation.Adder extends java.lang.Object

Лучше снабдить библиотеку документацией

Изменим для этого класс калькулятора.

package com.qwertovsky.calculator; import com.qwertovsky.calculator.operation.Adder; /** * Калькулятор, который умеет складывать * @author Qwertovsky * */ public class Calculator < /** * Определение суммы слагаемых * @param a массив слагаемых * @return сумма */ public int sum(int. a) < Adder adder=new Adder(); for(int i:a) < adder.add(i); >return adder.getSum(); > >

Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.

mkdir doc javadoc -d doc -charset utf-8 -sourcepath src -author -subpackages com.qwertovsky.calculator 

image

В результате получиться следующее

Можно подписать jar-архив

Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.

keytool -genkey -keyalg rsa -keysize 2048 -alias qwertokey -keystore path/to/qwerto.keystore Enter keystore password: Re-enter new password: What is your first and last name? [Unknown]: Valery Qwertovsky What is the name of your organizational unit? [Unknown]: Qwertovsky What is the name of your organization? [Unknown]: Qwertovsky What is the name of your City or Locality? [Unknown]: Tver What is the name of your State or Province? [Unknown]: Tverskaya obl. What is the two-letter country code for this unit? [Unknown]: RU Is CN=Valery Qwertovsky, OU=Qwertovsky, O=Qwertovsky, L=Tver, ST=Tverskaya obl., C=RU correct? [no]: y Enter key password for (RETURN if same as keystore password): Re-enter new password: 

Генерируем Certificate Signing Request (CSR)

keytool -certreq -file path/to/qwertokey.crt -alias qwertokey -keystore path/to/qwerto.keystore 

Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище

keytool -import -trustcacerts -keystore path/to/qwert.keystore -alias qwertokey -file path/to/qwertokey.cer 

Подписываем jar-архив

jarsigner -keystore path/to/qwerto.keystore calculator.jar qwertokey 

Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так

jarsigner -verify -verbose -certs -keystore path/to/qwerto.keystore calculator.jar 

Использование библиотеки

Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
Компилируем

cd HelloWorld javac -sourcepath src -d bin -classpath path/to/calculator.jar src/com/qwertovsky/helloworld/HelloWorld.java 
java -classpath bin:path/to/calculator.jar com.qwertovsky.helloworld.HelloWorld 

Собираем программу

Это можно сделать по-разному.

Первый способ
cd HelloWorld echo main-class: com.qwertovsky.helloworld.HelloWorld>manifest.mf echo class-path: lib/calculator.jar >>manifest.mf mkdir lib cp path/to/calculator.jar lib/calculator.jar jar -cmf manifest.mf helloworld.jar -C bin . 

Здесь есть тонкости.
В строке

main-class: com.qwertovsky.helloworld.HelloWorld 

не должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».

При использовании команды echo надо следить только за пробелом в конце строки с main-class.

Второй способ
cd HelloWorld echo class-path: lib/calculator.jar >manifest.mf mkdir lib cp path/to/calculator.jar lib/calculator.jar jar -cmef manifest.mf com.qwertovsky.helloworld.HelloWorld helloworld.jar -C bin . 

В данном способе избегаем ошибки с пробелом в main-class.

Третий способ
cd HelloWorld mkdir lib cd lib jar -xvf path/to/calculator.jar com/ created: com/ created: com/qwertovsky/ created: com/qwertovsky/calculator/ inflated: com/qwertovsky/calculator/Calculator.class created: com/qwertovsky/calculator/operation/ inflated: com/qwertovsky/calculator/operation/Adder.class cd .. cp -r bin/* lib/ jar -cef com.qwertovsky.helloworld.HelloWorld helloworld.jar -C lib . rm -r lib 

Включили код нужной библиотеки в исполняемый файл.

Запуск исполняемого jar-файла

Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.

cd Calculator ls ../HelloWorld/lib calculator.jar java -jar ../HelloWorld/helloworld.jar 

При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.

java -jar ../HelloWorld/helloworld.jar 

Как быть с приложениями JavaEE

Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее

javac -classpath path/to/jboss/common/lib/jboss-servlet*.jar -d ./classes src/com/qwertovsky/app/servlets/MenuSt.java

Структура архива JavaEE-приложения должна соответствовать определенному формату. Например

 my.ear `---META-INF | `---manifest.mf `---lib | `---mylib.jar `---my.war | `---META-INF | | `---manifest.mf | `---WEB-INF | | `---lib | | | `---myweblib.jar | | `---classes | | | `---com | | | `---. | | `---web.xml | `---index.html | `--- `---myejb.jar 

Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.

Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://czena.narkolog-na-dom-voronezh-11.ru/