Страницы

Поиск по вопросам

Показаны сообщения с ярлыком jar. Показать все сообщения
Показаны сообщения с ярлыком jar. Показать все сообщения

суббота, 11 апреля 2020 г.

Как в IntelliJ IDEA сделать значок для jar файла?

#java #jar #icon

                    
Чтобы он заменял чашку кофе :)
    


Ответы

Ответ 1



У самого jar - никак, у него иконка определяется ассоциацией файла в windows. Можно обернуть jar в exe с помощью JSmooth - и поставить иконку на ваш вкус.

четверг, 19 марта 2020 г.

Как создать установщик для jar

#jar #java


Добрый день. Есть приложение написанное на java. Собрано оно в jar. Необходимо создать
установщик под windows, создает директорию в программ файлс, копирует туда jar, создает
ярлыки с рабочего стола и с панели, и если нет явы на машине то предлагает ее скачать
и поставить. Может кто делал или знает что почитать?    


Ответы

Ответ 1



Попробуйте NSIS, или, например InnoSetup. У NSISа странноватый скриптовый язык, зато много плагинов и готового кода типа Java Launcher with automatic JRE installation.

вторник, 25 февраля 2020 г.

Не запускаются JAR файлы.

#jar #java


Ребят, помогите плз.
Создал программку, собрал Jar файл, делаю по нему двойной клик а он не запускается. 
Особенность в том что если запускать в ручную через cmd то все нормально. Если собирать
wrapper-ом в exe.
Как сделать так чтобы JAR сам по себе открывался по двойному клику?    


Ответы

Ответ 1



Процитирую ответ с SO For Windows 7: Start "Control Panel" Click "Default Programs" Click "Associate a file type or protocol with a specific program" Double click .jar Browse C:\Program Files\Java\jre7\bin\javaw.exe Click the button Open Click the button OK

среда, 5 февраля 2020 г.

Вызов jar или .class файла из java программы

#jar #java #классы



Каким образом вызвать исполнение jar файла из java программы(т.е. из нее будет осуществляться
вызов другой java программы)? (хотелось бы увидеть пример)
Каким образом вызвать исполнение class файла из java программы(т.е. из нее будет
осуществляться вызов другой java программы)? (хотелось бы увидеть пример)
    


Ответы

Ответ 1



Для исполнения любой внешней программы: Process proc = Runtime.getRuntime().exec("java -jar A.jar"); ну и аналогично можно и класс исполнить. Вариант 2: ProcessBuilder pb = new ProcessBuilder("java", "-jar", "A.jar"); pb.directory(new File("/working/directory")); Process proc = pb.start();

Ответ 2



В том же процессе можно выполнить нужный метод нужного класса с помощью reflection. Ниже пример вызова статического метода main(String[] args). try { //Загружаем класс с именем className Class targetClass = Class.forName(className); //Находим метод с именем "main" и списком параметров String[] Class[] argTypes = new Class[]{String[].class}; Method mainMethod = targetClass.getDeclaredMethod("main", argTypes); //В качестве параметра передаем пустой массив Object[] arguments = new Object[]{new String[0]}; mainMethod.invoke(null, arguments); } catch (ClassNotFoundException ex) { //handle exception } catch (NoSuchMethodException ex) { //handle exception } catch (InvocationTargetException ex) { //handle exception } catch (IllegalAccessException ex) { //handle exception }

суббота, 1 февраля 2020 г.

JAVA - как собирается .jar?

#java #jar


Подскажите "обывателю" пожалуйста какой мой ход действий.


Есть jar-файл
Если его открыть как архив, то в нем будут .class и .java файлы
.class скомпилированные
.java видимо исходники, так как они читаются 


Хочу поменять в исходнике часть функции. В этом понимание есть.
Как мне потом собрать обратно этот jar правильно? 
Нужно скомпилировать из .java обратно в .class и потом упаковать в jar.
Я могу просто скомпилированный .class добавить внутрь jar как в архив? Или нужно
еще как-то пересобирать весь jar?
Внутри jar есть еще манифест, но в нем ничего не прописано, только Manifest-Version: 1.0
    


Ответы

Ответ 1



Люди вы о чём? Вас спросили про jar файл, а вы сразу накидали кучу советов про maven, ItellijIDEA и пр. С чего вы решили, что у автора вопроса всё это есть? По сути. jar - это обычный ZIP-файл. Иногда бывает с подписями, контрольными суммами тогда что-то в нём исправить не получится. Если у вас простой файл, вы можете исправить java файл, перекомпилировать его с помощью javac в class файл и собрать jar файл заново с помощью обычного архиватора. В составе JDK есть файл JAR.EXE (если у вас Windows), который легко сделает это. Конечно удобнее всё делать в какой-либо Java IDE, если она у вас есть.

Ответ 2



Если используешь maven добавь в пом файле должно быть jar или соответствующий плагин. Читай мануал. javac MyApp.java jar -cf myJar.jar myApp

Можно ли сделать исполняемый файл приложения, написанного на java с расширением не jar, а exe?

#java #javafx #gui #jar #exe


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


Ответы

Ответ 1



Для того, чтобы преобразовать jar в exe, нужно скачать Launch4j, установить путь к начальному файлу и конечному результату (с нужным расширением) Нажать на вкладку JRE, в пункте Min JRE version написать 1.6.0_22 После чего нажать на шестерёнку, вбить имя доп файла и нажать save

Ответ 2



Если вы используете IntelliJ тогда в Project Structure -> Artifacts -> выберите Native Bundle: All далее выберите во вкладке Build -> Build Artifact -> имя приложения -> Build *.exe файл вы найдете тут: USER\IdeaProjects\projectname\out\artifacts\projectname\bundles\projectname -> там будет находится ваш .exe файл.

пятница, 10 января 2020 г.

Как питоном загрузить ресурс из jar файла?

#python #jar #java #resources


Всем привет.
Я в python/jython новичок. 
Возникла проблема: надо загрузить файлы из определенного каталога.
Локально, никаких проблем
for name in glob.glob("%s/*.json" % some_path):
    log.debug(name)
    definition = json.loads(file(name).read())

Проблемма вот в чем: основная аппликация на java распространяется как jar(s), и все
ресурсы тоже сидят в jar'e.
Путь к папке ресурсов определяется в jave:
URL resourceURL = CommonMethods.class.getClassLoader().getResource(resourceName);
String resourcePath = resourceURL.getPath();
String dirPath = resourcePath.substring(0, resourcePath.lastIndexOf("/")+1);

Если ресурс в jar'e, то получаем
dirPath="file:/opt/lib/core-lib-1.0.jar!/rulz/"

И glob.glob() не работает, думаю, что file(name).read() тоже. :(
Подскажите, как читать файлы питоном из jar'a?    


Ответы

Ответ 1



А вот так не подойдет? def show_jar_classes(jar_file): """prints out .class files from jar_file""" zf = zipfile.ZipFile(jar_file, 'r') try: lst = zf.infolist() for zi in lst: fn = zi.filename if fn.endswith('.class'): print(fn) finally: zf.close() То есть действуем так как-будто jar эквивалентен zip (взял здесь).

пятница, 3 января 2020 г.

Запустить java файл с кастомной версией java

#java #linux #jar


Добрый день.
У меня имеется некий сервер на Debian на котором я запускаю некие Java файлы. Для
их запуска используется Java, которая уже установлена в систему.
Собственно вопрос в том, а могу ли я скачать другую версию Java в какую-то папку
и уже запускать мои файлы не с помощью системной версии Java, а с той, которую скачали
отдельно? Если да - то какой командой. Спасибо
    


Ответы

Ответ 1



Да, разумеется можете. Допустим, вы запускаете файл с помощью системной java так: java -jar myapp.jar тогда если скачав другую версию, например в директорию /home/user/downloads/jdk/ вы можете запускать свой файл так: /home/user/downloads/jdk/bin/java -jar myapp.jar

вторник, 31 декабря 2019 г.

Как запустить заданный класс в JAR-файле?

#java #классы #jar #main


В JAR-файле (Test.jar) есть несколько классов с методом main (Class1, Class2).

Как запустить заданный класс из консоли?

java -jar Test.jar Class1
java -jar Test.jar Class2

    


Ответы

Ответ 1



При запуске можно указать любой исполняемый класс. Для того, чтобы был доступен класс из заданного JAR, нужно добавить его в classpath: java -cp Test.jar Class1 Если в манифесте JAR прописан параметр Main-Class Manifest-Version: 1.0 Main-Class: Class1 , то указанный класс будет запускаться при запуске исполняемого JAR: java -jar Test.jar Ссылки: JAR file manifest specificaiton How to run a class from Jar which is not the Main-Class in its Manifest file? Java Tutorial: Setting an Application Entry Point

понедельник, 30 декабря 2019 г.

Java - путь исполняемого jar файла

#java #jar


Требуется достать полный путь исполняемого файла, но при этом вернуться на 1 каталог
назад, к примеру 

мой класс.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()


Возвращает

/C:/Users/Arturs/Desktop/DIV.jar


но мне нужно довести до /C:/Users/Arturs/
Есть ли какие то предусмотренные функции, что бы не приходилось обрезать строку,
высчитывая количество символов справа.
    


Ответы

Ответ 1



Попробуй так: Path path = Paths.get(твой_класс.class.getResource(".").toURI()); System.out.println(path.getParent()); // <-- Parent directory System.out.println(path.getParent().getParent()); // <-- Parent of parent directory

Ответ 2



Попробуй new File(мой класс.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParent();

удалить из Git файл большого размера попавший туда несколько коммитов назад

#java #git #github #jar


Опыт java и Git ~1 месяц, ОС linux mint. 

Нужна ваша помощь:

1.В начале забыл добавить в .gitignore папку target/ в которой хранятся скомпилированные
*.jar *.class и прочие файлы.
2.позже через несколько коммитов обнаружил что папка .git весит 12+ мегабайт, по
размеру предполагаю что это забытый мной jar файл (кода у меня ~15 килобайт, все .class
файлы ~14 килобайт)
3.нашел этот файл руками он весит 12 МБ и лежит в папке

.git/objects/pack/pack-2af1dfb851dabe3d606e0d0f9ad7ba84fd74f043.idx 


Прошел несколько вопросов на русском и английском stackoverflow + google
пробовал следующее:


git filter-branch --index-filter 'git rm --cached --ignore-unmatch
FILENAME' --prune-empty -- --all
git filter-branch --index-filter 'git rm --cached --ignore-unmatch
FILENAME' HEAD
git filter-branch --force --index-filter 'git rm --cached
--ignore-unmatch FILENAME' --prune-empty --tag-name-filter cat -- --all


Вместо FILENAME пробовал подставлять вот это:


target/gs-rest-service-0.1.0.jar
gs-rest-service-0.1.0.jar
target/
*.jar


толку не дало.

В итоге у меня 2 вопроса:
-Как выяснить что это весит 12МБ в папке .git и как это удалить?

вот ссылка на мо проект на github, можно скачать как zip-архив или клонировать:

git clone https://github.com/jiraff537/tic-tac-toe-RESTfulWebService.git


(да я пытаюсь написать Rest-бэкэнд на Spring Boot'e для крестиков-ноликов)
    


Ответы

Ответ 1



вы можете посмотреть содержимое каталога target (во всех коммитах): $ git filter-branch --tree-filter 'ls -l target' Rewrite c05ea07d436c9e6c96f9e441bd469ae89d6383b4 (1/29)total 14056 drwxr-xr-x 3 user user 4096 May 23 14:27 classes -rw-r--r-- 1 user user 14352691 May 23 14:27 gs-rest-service-0.1.0.jar -rw-r--r-- 1 user user 3829 May 23 14:27 gs-rest-service-0.1.0.jar.original drwxr-xr-x 2 user user 4096 May 23 14:27 maven-archiver drwxr-xr-x 3 user user 4096 May 23 14:27 maven-status ... или информацию о конкретном файле target/gs-rest-service-0.1.0.jar: $ git filter-branch --tree-filter 'ls -l target/gs-rest-service-0.1.0.jar' Rewrite c05ea07d436c9e6c96f9e441bd469ae89d6383b4 (1/29) -rw-r--r-- 1 user user 14352691 May 23 14:29 target/gs-rest-service-0.1.0.jar ... удалить файл во всех коммитах можно, например, так: $ git filter-branch --tree-filter 'rm -f target/gs-rest-service-0.1.0.jar' Rewrite f2133e7b3d7f209f43e88b802a6589cb2a1eadfd (29/29) Ref 'refs/heads/master' was rewritten после такого переписывания истории в своём локальном репозитории вам придётся перезаписать историю и в репозитории на сайте github.com, добавив опцию -f (--force) команде push: $ git push -f p.s. если репозиторий был склонирован ещё куда-то/кем-то, то там/тому надо будет принудительно переключиться на отправленную вами переписанную историю: $ git fetch $ git reset --hard origin/master или просто заново склонировать репозиторий в пустой каталог. как это удалить? после того, как вы перезаписали историю, объект типа blob, содержащий удалённый файл, стал «осиротевшим». чтобы удалить его, надо воспользоваться командой gc (gargabe collection): $ git gc Counting objects: 500, done. Delta compression using up to 4 threads. Compressing objects: 100% (222/222), done. Writing objects: 100% (500/500), done. Total 500 (delta 221), reused 413 (delta 172) как показывает вывод команды $ du -sb .git (выполненной до и после $ git gc), занимаемый каталогом .git объём изменился на 242997 байт (13254649-13011652). вероятно, именно столько занимал удалённый файл (в сжатом виде). после того, как вы перезаписали свою локальную историю, удалённый файл (пока) не стал «осиротевшим» — на него есть ссылки из (пока не переписанной) истории подключенного репозитория (который на github-е находится). после того, как вы перепишете историю и на github-е, команда $ git gc должна будет удалить объект типа blob, содержащий этот «осиротевший» файл. дополнение полную очистку и упаковку всех объектов, чтобы добиться минимального размера каталога .git, можно выполнить примерно так: $ git gc; git prune; git repack -ad ваш репозиторий (т.е., содержимое каталога .git), после удаления того большого файла, и полной переупаковки, стал занимать у меня 187165 байт.

воскресенье, 29 декабря 2019 г.

Задание аргументов при запуске jar-а

#jar #java



Сколько и где задаются аргументы при запуске jar - файла?
Как их прочитать в программе?
    


Ответы

Ответ 1



В общем случае можно сделать так: java -jar myCode.jar param1 param2... В процессе написания вашего когда, вы, по всей видимости воспользуетесь фцнкцией public static void main(...). Данная функция в качестве аргумента принимает массив String[] args, который и будет в себе содержать параметры param1, param2...

Ответ 2



Аргументы задаются после названия jar файла который Вы запускаете. аргументы разделаются пробелом их может быть очень много. java -jar MyFile.jar par1 par2 par3 par4 .... Это все передается в main(String[] args) - args и есть массив параметров которые вы передаете

Ответ 3



Выполните комадну java без аргументов и получите всю необходимую информацию.

среда, 25 декабря 2019 г.

Редактирование .class файлов

#java #jar #декомпиляция


Есть JAR файл. Необходимо декомпилировать один из его классов, отредактировать одно
значение и закомпилировать обратно.
    


Ответы

Ответ 1



Если хотите сделать это одноразово, то попробуйте JAD. Но учтите, что декомпиляторы не всегда могут получить исходник из .class-файла. Предположим, вы сумели его декомпилировать верно. После этого, его надо собрать обратно. Чтобы это сделать, надо воспользоваться компилятором. javac -cp исходный.jar:библиотеки.jar исправленный.класс.java (если под виндой, то библиотеки надо разделять точкой с запятой вместо двоеточия) Ну а потом запаковать с помощью утилиты jar или какого-нибудь winrar Если JAD не выдаёт плохой исходник, то можно попробовать другие варианты декомпиляторов. В худшем случае, вам придётся после декомпиляции разбираться в байткоде и руками править неверно декомпилированный код. UPD Также есть возможность вскрыть .class-файл и править его с помощью Apache BCEL. С его помощь можно подгрузить класс, модифицировать его, а потом обратно записать. Правда Apache BCEL - программное средство, а не тула, так что вам придётся написать программу, которая бы патчила класс нужным образом.

вторник, 24 декабря 2019 г.

Картина в jar файле

#java #jar


Как правильно добавить картинку в проект java. При отладке картинка отображается,
но после сборки проекта в jar, картинки нет.

systemTray = SystemTray.getSystemTray();

    Image image = Toolkit.getDefaultToolkit().getImage("src\\images\\logo-main2.png");


    TrayIcon trayIcon = new TrayIcon(image , "GrindFM", popupMenu);
    trayIcon.setImageAutoSize(true);
    systemTray.add(trayIcon);





    


Ответы

Ответ 1



Проблема в том, что вы загружаете ресурс с диска, а не с jar'ника. Когда вы работаете в dev окружении, вы запускаете jar'ник оттуда, откуда можно пройти по папкам на диске и дойти до этой картинки. Когда вы запускаете это на другом ПК, то там соответственно этой папки нет. Вам нужно использовать загрузку ресурсов из classpath, для этого поменяйте код следующим образом systemTray = SystemTray.getSystemTray(); URL resource = getClass().getResource("images/logo-main2.png"); Image image = Toolkit.getDefaultToolkit().getImage(resource); TrayIcon trayIcon = new TrayIcon(image , "GrindFM", popupMenu); trayIcon.setImageAutoSize(true); systemTray.add(trayIcon); Все должно заработать

воскресенье, 22 декабря 2019 г.

Параметр манифеста при запуске jar файла

#java #jar #linux


Прошу отнестить с пониманием, поскольку я новичок в Java. Пытался запустить jar файл
в Linux с помощью команды
./java -jar /Samplejavaprogram/Sample.jar

и получил в результате сообщение
no main manifest attribute, in /Samplejavaprogram/Sample.jar

Подскажите, что именно надо добавить в команду (хотелось бы знать конкретный текст),
чтобы выполнить java программу.
Привожу текст программы (может быть в нем причина)
package org.myorg;

import java.io.*;
import java.util.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.*;

public class Sample {
    public static void main (String[] args) throws IOException  {
                    int CountComputers;
            FileInputStream fstream = new FileInputStream(
                    "/export/hadoop-1.0.1/bin/countcomputers.txt");
            DataInputStream input = new DataInputStream(fstream);
            BufferedReader br = new BufferedReader(new InputStreamReader(input));
            String result=br.readLine();
            CountComputers=Integer.parseInt(result);
            input.close();
            fstream.close();
            Connection con = null;
            Statement st = null;
                ResultSet rs = null;    
               String url = "jdbc:postgresql://192.168.1.8:5432/NexentaSearch";
                String user = "postgres";
                String password = "valter89";
            ArrayList paths = new ArrayList();
            try
            {
                con = DriverManager.getConnection(url, user, password);
                        st = con.createStatement();
                        rs = st.executeQuery("select path from tasks order by id");
                while (rs.next()) { paths.add(rs.getString(1)); };
                PrintWriter zzz = null;
                    try
                    {
                            zzz = new PrintWriter(new FileOutputStream("/export/hadoop-1.0.1/bin/readwaysfromdatabase.txt"));
                    }
                    catch(FileNotFoundException e)
                    {
                            System.out.println("Error");
                            System.exit(0);
                    }
                    for (int i=0; i


Ответы

Ответ 1



Запускаете вы правильно (если забыть про слеш в начале пути к jar; у вас что, папка Samplejavaprogram в корневой директории лежит?). Ошибка в манифесте jar-файла, который вы пытаетесь запустить. Скорее всего отсутствует свойство Main-Class. Проверьте, чтобы в вашей Sample.jar в папке META-INF был файл MANIFEST.MF, а в нём строка Main-Class: путь.к.вашему.главному.классу.ГлавныйКласс.

Ответ 2



Я бы еще посоветовал использовать сборщик проектов, на-пример, Gradle. Добавив скрипт сборки в ваш проект, Gradle сделает все за Вас. Вот пример скрипта который при сборке проекта будет паковать все в .jar build.gradle group 'MyApplication' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'application' sourceCompatibility = 1.8 targetCompatibility = 1.8 mainClassName ="com.common.Application" buildscript { repositories { mavenCentral() } } repositories { mavenCentral() } // Include dependent libraries in archive. jar { manifest { attributes "Main-Class": "$mainClassName" } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' //JSON compile group: 'org.json', name: 'json', version: '20090211' //Log4j compile group: 'log4j', name: 'log4j', version: '1.2.16' }

пятница, 20 декабря 2019 г.

Написал программу (тестовая задача) от потенциального работодателя. Как её отправить?

#java #linux #intellij_idea #debian #jar


Java, Intellij IDEA

Написал программу.
На вход даются файлы: *.tsv, *.xml
На выходе получить *.txt вариант таблицы

Полтора дня писал программу.
Когда запускаю итоговый вариант в IDE через "Edit configuration...", всё замечательно
компилируется и выдаётся тот самый заветный файл.тхт.

Но крайнее требование в ТЗ, чтобы программа выдавала файл посредством вызова команды
в терминале типа:

java Name.class file.xml file.tsv result.txt


И вот тут я завис окончательно, потому что из директории ./out/../Name.class эта
команда выдаёт

Could not find or load main class Name.class


Потеряв надежду (было много попыток и гугла ~10-15 минут), решил запилить jar файл
и тупо отправить его HRу.

Но чего-то передумал и решил написать сюда.
Git я знаю на уровне
init, commit, status, add
т.е. только на уровне сохранить у себя.
Пытался

git add --all


но он оказывается не хочет добавлять папки (онли файлы)

fatal: CRLF будет заменен на LF в settings.xml.


Напишите пожалуйста:


Откуда (директория) всё-таки нужно запускать java Name.class... и что перед этим
может нужно сделать в IDEA (экспортировать/импортировать/...)?
Каким путём отправить файл HRу (общались по почте)?


PS: ноутбук к нему не понесу
PPS: у меня стоит Debian
    


Ответы

Ответ 1



Не обязательно собирать jar для запуска программы. По сути jar является лишь архивом, содержащим в себе все скомпилированные файлы (с расширением .class), а также файл манифеста, в котором помимо всего прочего указано, с какого класса начать запуск программы (в каком из классов имеется нужный метод main). Как запустить jar уже описывали выше. А для того, чтобы запустить программу не из пакета, а ту, которая просто скомпилирована в виде файла .class необходима следующая команда: java {ClassName} {arguments} где ClassName - полный путь до класса, включая имя пакета, если он есть. Кроме того, скомпилированный файл, соответствующий указанному классу должен быть расположен в папке, соответствующей пакету: например, если есть файл Test1.class (с классом Test1 без пакета) - строка запуска будет java Test1 из той же папки; если есть файл Test2.class (соответственно с классом Test2 и указанием пакета org.sample) - запуск будет осуществляться командой java org.sample.Test2, а файл Test2.class должен лежать в папке org/sample относительно места, откуда производится запуск. Надеюсь, это будет полезно.

Ответ 2



Собираем артефакт! Затем прописываем java -jar Name.jar file.xml file.tsv res.txt Огромное спасибо, Lex.

Ответ 3



Если плохо знаеш Git, то можна закинуть проект на GitHub через Intellij IDEA. Вот тут подробно расписано: https://www.javacodegeeks.com/2014/04/how-to-add-an-intellij-project-to-github.html

четверг, 19 декабря 2019 г.

Как создать jar-архив используя (в) Intellij idea?

#java #jar #архивация


Не могу создать создать исполняемый архив JAR .Как я понял данная проблема должна
решаться с помощью Terminal ,НО ОН У МЕНЯ И НЕ РАБОТАЕТ(не могу туда заносить текст,как
и печатать там ,так и вставлять туда скопированный текст).Также как использовать при
компиляции флаги.Также где набирать команду для создания jar-архива?
    


Ответы

Ответ 1



В идее сначала идете в File | Project Structure | Artifacts, там создаете новый artifact, jar --> From modules with dependencies Потом Build | Build artifacts

Ответ 2



По-хорошему у вас должна быть система сборки, которая сама этим занимается. Самые известные - это Maven, Gradle и Ant. Кроме простой компиляции в war/jar эти системы умеют еще много полезных штук, в том числе подчищать директории от промежуточных файлов, подправлять файлы в момент компиляции, прогонять тесты и многое другое. После этого достаточно добавить задачи в Run Configurations, и IDEA сама озаботится вызовом консольных команд, останется только запускать нужные конфигурации.

воскресенье, 1 декабря 2019 г.

Что такое jar файл и зачем он нужен?

#java #jar


Вопрос такой что такое jar файл и зачем он нужен на практике. Ведь если есть файл
java, есть файл class который уже переведен в байт-код, зачем тогда jar файл?

Какая его функция и можно ли без него обойтись?
    


Ответы

Ответ 1



JAR-файл — это Java-архив (Java ARchive). Это простой архивный файл, сжатый (иногда с нулевой компрессией) по алгоритму zip. Он был создан для удобства распространения программ, написанных на Java. Так как обычная программа содержит сотни, тысячи, а иногда и миллионы файлов. Файл может содержать: файл манифеста META-INF/MANIFEST.MF java-файлы (исходный код) class-файлы файлы, необходимые для работы программы: картинки, файлы с настройками и прочее (ресурсы) электронные подписи, которые позволяют защитить программу от модификации Манифест - это текстовый файл формата ключ: значение; он содержит описание jar-файла. В нем могут быть следующие ключи: Manifest-Version - версия манифеста Main-Class - имя главного класса (должен содержать метод main), такой jar-файл можно запустить как обычный исполняемый файл Class-Path - позволяет указать CLASSPATH, который необходим для полноценной работы программы SHA-Digest - контрольная сумма определенного файла внутри архива Кроме jar, также существуют другие архивы, связанные с Java: WAR (Web Application aRchive) - содержит в себе приложение для веба EAR (Enterprise Application aRchive) - содержит в себе энтерпрайз приложение (обычно из нескольких модулей) APK (Android aPplication pacKage) - содержит в себе приложение для Android Можно ли обойтись без? В принципе, можно, все что вам необходимо - это всегда точно копировать структуру вашего приложения. То есть все класс-файлы и файлы с ресурсами должны располагаться в правильных директориях. Переменная CLASSPATH должна содержать пути ко всем зависимостям. Если эти условия соблюдены, то ваше приложение будет работать без упаковки в jar. P.S. В переводе с английского, jar - означает банка, стеклянный или керамический цилиндрический контейнер с широким горлом, предназначенный для хранения еды (обычно). Кофе часто хранят в банках, так что тут игра слов: банка с кофе - банка с java-классами.

понедельник, 17 июня 2019 г.

Как закрыть консоль из которой вызвал java приложение?

Привет народ! Сорри за тупой вопрос. Как закрыть консоль из которой вызвал java приложение?
я создал такой .bat файл:
java -jar Application.jar
Запускаю его. Он запускает моё приложение. У меня вылазит мой JFrame. А консоль остается до тех пор пока я не закрою этот Jframe. Если закрываю консоль приложение тоже закрывается.
Код main такой
public static void main(String[] args) {
frame = new SomeFrame(); frame.enterHowUnregistred(); frame.init(); frame.setSize(884, 595); frame.setLocationRelativeTo(null); frame.setVisible(true); }


Ответ

Порылся в инете и нашел это: смысл в том что консоль почти сразу закроется и оставит только ваше приложение:
start javaw -jar Application.jar
Притом выполнять надо именно через javaw

вторник, 14 мая 2019 г.

Не запускаются JAR файлы.

Ребят, помогите плз. Создал программку, собрал Jar файл, делаю по нему двойной клик а он не запускается. Особенность в том что если запускать в ручную через cmd то все нормально. Если собирать wrapper-ом в exe. Как сделать так чтобы JAR сам по себе открывался по двойному клику?


Ответ

Процитирую ответ с SO
For Windows 7: Start "Control Panel" Click "Default Programs" Click "Associate a file type or protocol with a specific program" Double click .jar Browse C:\Program Files\Java\jre7\bin\javaw.exe Click the button Open Click the button OK