To obtain the File
for a given Class
, there are two steps:
- Convert the
Class
to aURL
- Convert the
URL
to aFile
It is important to understand both steps, and not conflate them.
Once you have the File
, you can call getParentFile
to get the containing folder, if that is what you need.
Step 1: Class
to URL
As discussed in other answers, there are two major ways to find a URL
relevant to a Class
.
-
URL url = Bar.class.getProtectionDomain().getCodeSource().getLocation();
-
URL url = Bar.class.getResource(Bar.class.getSimpleName() + ".class");
Both have pros and cons.
The getProtectionDomain
approach yields the base location of the class (e.g., the containing JAR file). However, it is possible that the Java runtime’s security policy will throw SecurityException
when calling getProtectionDomain()
, so if your application needs to run in a variety of environments, it is best to test in all of them.
The getResource
approach yields the full URL resource path of the class, from which you will need to perform additional string manipulation. It may be a file:
path, but it could also be jar:file:
or even something nastier like bundleresource://346.fwk2106232034:4/foo/Bar.class
when executing within an OSGi framework. Conversely, the getProtectionDomain
approach correctly yields a file:
URL even from within OSGi.
Note that both getResource("")
and getResource(".")
failed in my tests, when the class resided within a JAR file; both invocations returned null. So I recommend the #2 invocation shown above instead, as it seems safer.
Step 2: URL
to File
Either way, once you have a URL
, the next step is convert to a File
. This is its own challenge; see Kohsuke Kawaguchi’s blog post about it for full details, but in short, you can use new File(url.toURI())
as long as the URL is completely well-formed.
Lastly, I would highly discourage using URLDecoder
. Some characters of the URL, :
and /
in particular, are not valid URL-encoded characters. From the URLDecoder Javadoc:
It is assumed that all characters in the encoded string are one of the following: “a” through “z”, “A” through “Z”, “0” through “9”, and “-“, “_”, “.”, and “*”. The character “%” is allowed but is interpreted as the start of a special escaped sequence.
…
There are two possible ways in which this decoder could deal with illegal strings. It could either leave illegal characters alone or it could throw an IllegalArgumentException. Which approach the decoder takes is left to the implementation.
In practice, URLDecoder
generally does not throw IllegalArgumentException
as threatened above. And if your file path has spaces encoded as %20
, this approach may appear to work. However, if your file path has other non-alphameric characters such as +
you will have problems with URLDecoder
mangling your file path.
Working code
To achieve these steps, you might have methods like the following:
/**
* Gets the base location of the given class.
* <p>
* If the class is directly on the file system (e.g.,
* "/path/to/my/package/MyClass.class") then it will return the base directory
* (e.g., "file:/path/to").
* </p>
* <p>
* If the class is within a JAR file (e.g.,
* "/path/to/my-jar.jar!/my/package/MyClass.class") then it will return the
* path to the JAR (e.g., "file:/path/to/my-jar.jar").
* </p>
*
* @param c The class whose location is desired.
* @see FileUtils#urlToFile(URL) to convert the result to a {@link File}.
*/
public static URL getLocation(final Class<?> c) {
if (c == null) return null; // could not load the class
// try the easy way first
try {
final URL codeSourceLocation =
c.getProtectionDomain().getCodeSource().getLocation();
if (codeSourceLocation != null) return codeSourceLocation;
}
catch (final SecurityException e) {
// NB: Cannot access protection domain.
}
catch (final NullPointerException e) {
// NB: Protection domain or code source is null.
}
// NB: The easy way failed, so we try the hard way. We ask for the class
// itself as a resource, then strip the class's path from the URL string,
// leaving the base path.
// get the class's raw resource path
final URL classResource = c.getResource(c.getSimpleName() + ".class");
if (classResource == null) return null; // cannot find class resource
final String url = classResource.toString();
final String suffix = c.getCanonicalName().replace('.', '/') + ".class";
if (!url.endsWith(suffix)) return null; // weird URL
// strip the class's path from the URL string
final String base = url.substring(0, url.length() - suffix.length());
String path = base;
// remove the "jar:" prefix and "!/" suffix, if present
if (path.startsWith("jar:")) path = path.substring(4, path.length() - 2);
try {
return new URL(path);
}
catch (final MalformedURLException e) {
e.printStackTrace();
return null;
}
}
/**
* Converts the given {@link URL} to its corresponding {@link File}.
* <p>
* This method is similar to calling {@code new File(url.toURI())} except that
* it also handles "jar:file:" URLs, returning the path to the JAR file.
* </p>
*
* @param url The URL to convert.
* @return A file path suitable for use with e.g. {@link FileInputStream}
* @throws IllegalArgumentException if the URL does not correspond to a file.
*/
public static File urlToFile(final URL url) {
return url == null ? null : urlToFile(url.toString());
}
/**
* Converts the given URL string to its corresponding {@link File}.
*
* @param url The URL to convert.
* @return A file path suitable for use with e.g. {@link FileInputStream}
* @throws IllegalArgumentException if the URL does not correspond to a file.
*/
public static File urlToFile(final String url) {
String path = url;
if (path.startsWith("jar:")) {
// remove "jar:" prefix and "!/" suffix
final int index = path.indexOf("!/");
path = path.substring(4, index);
}
try {
if (PlatformUtils.isWindows() && path.matches("file:[A-Za-z]:.*")) {
path = "file:/" + path.substring(5);
}
return new File(new URL(path).toURI());
}
catch (final MalformedURLException e) {
// NB: URL is not completely well-formed.
}
catch (final URISyntaxException e) {
// NB: URL is not completely well-formed.
}
if (path.startsWith("file:")) {
// pass through the URL as-is, minus "file:" prefix
path = path.substring(5);
return new File(path);
}
throw new IllegalArgumentException("Invalid URL: " + url);
}
You can find these methods in the SciJava Common library:
- org.scijava.util.ClassUtils
- org.scijava.util.FileUtils.
I need to use the xgboost4j package in my Java project. The installation instructions say that I must use Maven, but my project is a simple Java project unrelated Maven.
I built the package using “mvn install”. Is there a way to find the JAR file so that I can use it in my Java project?
asked Apr 4, 2017 at 10:02
Erel Segal-HaleviErel Segal-Halevi
33.3k36 gold badges112 silver badges180 bronze badges
2
Using the mvn package
or mvn install
will download the dependency mentioned in your pom.xml
. And you can find that jar in your IDE under the external library section.
Below is the screen-shot of intellij-idea.
Also actual location of your downloaded jar will be in ~/.m2/repository/
and then you need to go into the group-id
and artifact-id
package structure to find it.
Edit :- to search more efficiently using command line use find . -name "xgboost4*.jar*"
which will output the complete location of jar file like below :-
find . -name "xgboost4*.jar*"
./ml/dmlc/xgboost4j/0.6/xgboost4j-0.6.jar.lastUpdated
./ml/dmlc/xgboost4j/0.7/xgboost4j-0.7.jar.lastUpdated
answered Apr 4, 2017 at 10:11
2
You should be able to find the jar in your local maven repository, ~/.m2/repository/
Maven usually downloads the dependencies from the maven central repo, then save it into your local repo.
answered Apr 4, 2017 at 10:06
Каков ваш любимый инструмент, плагин, script, чтобы найти java-класс в кучке файлов jar?
Очень часто я наследую код, который жалуется на класс, который не существует, и это только потому, что файл jar не включен в путь к классам. Но, в каком файле jar есть класс? У меня может не быть JAR (так что я должен искать в Интернете), или добавление JAR в путь к классам может создать проблему с дублированным определением класса.
Я бы предпочел плагин eclipse, но я открыт для любого программного обеспечения, которое работает с Windows.
Я знаю… Windows не мой выбор, но это то, с чем мне нужно работать.
Спасибо!
Луис
P.S. Спасибо за ответ. Изучив некоторые ответы, я понял, что должен лучше объяснить свой сценарий. У нас была библиотека загруженных или созданных JAR файлов, но иногда класс был где-то в сети.
17 авг. 2010, в 00:43
Поделиться
Источник
17 ответов
(Это улучшение по сравнению с script, которое у меня было в предыдущих версиях ответа, поскольку оно дает намного более чистый результат по цене некоторого awk
специального/уродливого цитирования.)
Я построил script (findinjars
), который делает именно это.
#!/usr/bin/env bash
if [[ ($# -ne 1) && ($# -ne 2) ]]
then
echo "usage is $0 <grep pattern to look for in 'jar tvf' output> [<top-of-dir-tree> or, if missing, current dir]"
else
THING_TO_LOOKFOR="$1"
DIR=${2:-.}
if [ ! -d $DIR ]; then
echo "directory [$DIR] does not exist";
exit 1;
fi
find "$DIR" -iname *.jar | while read f ; do (jar tf $f | awk '{print "'"$f"'" " " $0}' | grep -i "$THING_TO_LOOKFOR") ; done
fi
вы можете вызвать его с помощью:
$findinjars a.b.c.d.Class [directoryTreeRoot or, if missing, current dir]
или просто
$findinjars partOfClassName [directoryTreeRoot or, if missing, current dir]
Точечные символы в имени полного класса будут интерпретироваться в смысле регулярного выражения “любой символ”, но это не очень важно, так как это утилита эвристики (почему и нечувствительность к регистру тоже BTW). Обычно я не беспокоюсь о полном имени класса и просто набираю его часть.
Marcus Junius Brutus
10 май 2012, в 10:33
Поделиться
В тех же строках, что и ответ BalusC (я не могу оставлять комментарии еще и ссылку 2 urls, нет репутации:(), вы можете найти банку благодаря этим двум механизмам поиска jar:
– http://www.jarfinder.com/
– findjar
Fanny H.
16 авг. 2010, в 23:07
Поделиться
Я столкнулся с той же проблемой бесчисленное количество раз, поэтому я написал небольшой инструмент, чтобы найти их.
Простая командная строка:
findclass MyClass -classpath…
Он ищет каталоги, jar, zip, war и ear файлы для вашего класса.
Я написал это несколько лет назад и использую его все время.
Я думал, что другие могут оказаться полезными, поэтому я загрузил github.
Он свободно доступен для загрузки:
https://github.com/eurozulu/Findclass/tree/master/dist
Если вы хотите посмотреть источник, он находится на том же сайте:
https://github.com/eurozulu/Findclass/tree/master
Если вам это нравится, просто дай мне знать, чтобы дать мне это теплое комфортное чувство:)
Rob
18 дек. 2011, в 12:19
Поделиться
Я обычно использую bash для этого: grep -lr "ClassName" .
Фокус в том, что имена никак не закодированы. Вы можете открыть файл jar в текстовом редакторе, и вы увидите их. (Вы даже можете включить имя пакета в поисковый запрос.)
Я подозреваю, что некоторые эквиваленты окон тоже.
Nikita Rybak
16 авг. 2010, в 21:56
Поделиться
Простая команда. Вам не нужно использовать “while-do”, используйте “& &” для печати имени файла, если ‘grep’ находит класс.
find . -name '*.jar' -print0 | xargs -0 -I '{}' sh -c 'jar tf {} | grep Hello.class && echo {}'
Wenbing Li
09 окт. 2013, в 01:53
Поделиться
Самый лучший и простой способ – использовать Decompiler JAD. И да, его ECLIPSE PLUGIN!
Загрузить и сохранить плагин в любом месте на вашем компьютере.
Плагин содержит следующие файлы:
- Временная папка
- Файл jad.exe
- A * net.sf.jadclipse_3.3.0.jar * Плагин JAR
- Readme
Выполните следующие шаги:
- Скопируйте плагин JAR в папку плагинов папки eclipse
- Открыть затмение. Перейти к окну → Предпочтения → Java → JADClipse → Путь к декомпилятору.
- Укажите путь к jad.exe
- Перезапуск Eclipse
Теперь выберите любой класс и нажмите F3.
Файл .class автоматически декомпилирует и отображает содержимое!
Neal
09 янв. 2014, в 09:10
Поделиться
для x в $(find. -name ‘*.jar’)
делать
unzip -l $x | grep WCCResponseImpl
сделано
user2981289
12 нояб. 2013, в 01:53
Поделиться
Grepj – это утилита командной строки для поиска классов в файлах jar.
Вы можете запустить утилиту как grepj package.Class my1.jar my2.war my3.ear
Область поиска
- Классы в файле jar
- Классы внутри вложенных артефактов, таких как банки в ушных и военных файлах
- Также просматриваются WEB-INF/классы.
Можно предоставить несколько файлов jar, ear, war.
rrevo
19 авг. 2013, в 05:40
Поделиться
Я использую jarscan. Это исполняемый файл jar, который может рекурсивно искать всю структуру папок для банок, содержащих класс, который вы ищете. Он выполняет поиск по имени класса, имени пакета или регулярному выражению.
Mike Pone
09 май 2012, в 21:30
Поделиться
Я написал программу для этого: https://github.com/javalite/jar-explorer Он также декомпилирует существующий байтовый код, чтобы показать вам интерфейсы, методы, суперклассы, покажет содержимое других ресурсов – текст, изображения, html и т.д.
ipolevoy
01 июль 2011, в 04:27
Поделиться
используйте это:
public class Main {
private static final String SEARCH_PATH = "C:\workspace\RPLaunch";
private static String CLASS_FILE_TO_FIND =
"javax.ejb.SessionBean";
private static List<String> foundIn = new LinkedList<String>();
/**
* @param args the first argument is the path of the file to search in. The second may be the
* class file to find.
*/
public static void main(String[] args) {
File start;
new Scanner(args[0]);
if (args.length > 0) {
start = new File(args[0]);
if (args.length > 1) {
CLASS_FILE_TO_FIND = args[1];
}
} else {
start = new File(SEARCH_PATH);
}
if (!CLASS_FILE_TO_FIND.endsWith(".class")) {
CLASS_FILE_TO_FIND = CLASS_FILE_TO_FIND.replace('.', '/') + ".class";
}
search(start);
System.out.println("------RESULTS------");
for (String s : foundIn) {
System.out.println(s);
}
}
private static void search(File start) {
try {
final FileFilter filter = new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().endsWith(".jar") || pathname.isDirectory();
}
};
for (File f : start.listFiles(filter)) {
if (f.isDirectory()) {
search(f);
} else {
searchJar(f);
}
}
} catch (Exception e) {
System.err.println("Error at: " + start.getPath() + " " + e.getMessage());
}
}
private static void searchJar(File f) {
try {
System.out.println("Searching: " + f.getPath());
JarFile jar = new JarFile(f);
ZipEntry e = jar.getEntry(CLASS_FILE_TO_FIND);
if (e == null) {
e = jar.getJarEntry(CLASS_FILE_TO_FIND);
}
if (e != null) {
foundIn.add(f.getPath());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ILMTitan
16 авг. 2010, в 23:42
Поделиться
Очень часто я наследую код, который жалуется на класс, который не существует, и это просто потому, что файл jar не включен в путь к классам.
Если это не в пути к классам, то у вас, вероятно, вообще нет самого файла JAR. Поиск через встроенную функцию Eclipse Ctrl+Shift+T
не поможет. Обычно вы можете использовать имя пакета для “угадывания”, где вы можете получить JAR файл из Интернета. Например. Класс org.apache.commons.lang.XXX
доступен в http://commons.apache.org/lang.
Для неочевидных я сам использую http://www.jarhoo.com, механизм поиска JAR (который, к сожалению, недоступен в этот момент!).
BalusC
16 авг. 2010, в 22:09
Поделиться
Недавно я создал инструмент для поиска классов, пакетов и библиотек. Вы можете попробовать http://javasearch.buggybread.com/. Нажмите на фреймворк, и он поможет вам найти информацию о зависимостях (jar, pom).
Vivek Vermani
16 фев. 2016, в 23:30
Поделиться
Я пробовал некоторые из этих команд Unix, но они по ошибке вызывали ошибки. Здесь Perl script я написал. Он специально разработан для работы на Cygwin с использованием версии Perl для Cygwin.
#!/bin/perl
# This program searches recursively for a given class in .jar files contained in or below
# directories given as command-line arguments. See subroutine printUsageAndExit for details,
# or just run it with -h command-line argument.
#
# It is specfically designed to run on Windows via Cygwin, with Cygwin version of Perl,
# though it could easily be modified to run elsewhere.
use strict;
use File::Find;
use Getopt::Std;
sub processCommandLineArguments ($@);
sub checkCommandLineArguments;
my $className;
my @startingDirectories;
&checkCommandLineArguments;
&processCommandLineArguments ($className, @startingDirectories );
my %options;
$options{wanted} = &processFoundFile;
$options{no_chdir} = 1;
$options{follow} = 1; # So that $File::Find::fullname will be populated.
$options{follow_skip} = 2; # So it won't die if it encounters the same thing twice.
&find ( %options, @startingDirectories ); # find comes from "use File::Find".
sub processFoundFile{
# This routine is called by File::Find.
#
# $File::Find::dir is the current directory name,
# $_ is the current filename within that directory
# $File::Find::name is the complete pathname to the file.
my $jarFileName = $_;
return unless /.jar$/;
my $fullFileName = $File::Find::fullname; # set by File::Find only when $options{follow} == 1
# Windowize filename:
$fullFileName = qx{cygpath --windows $fullFileName 2>&1};
chomp $fullFileName;
$fullFileName = '"' . $fullFileName . '"';
my @results = qx{jar -tf $fullFileName 2>&1};
local $/ = "rn"; # So that this Unix-based Perl can read output from Windows based jar command.
for my $result ( @results )
{
chomp $result;
if ( $result =~ /b(w+).((java)|(class))$/ )
{
my $classNameFound = $1;
if ($classNameFound eq $className)
{
print $jarFileName, "n";
return;
}
}
}
}
sub processCommandLineArguments ($@){
my $refClassName = shift;
my $refStartingDirectories = shift;
$$refClassName = '';
# parse @ARGV
while (@ARGV){
my $arg = shift @ARGV;
if ($arg =~ /Q-c/){
$$refClassName = shift @ARGV;
}elsif ($arg =~ /Q-directories/){
while ($ARGV[0] =~ m{^/(w+/?)+b}){
my $directory = shift @ARGV;
die "Can't find $directory $!" if ! -e $directory;
push @$refStartingDirectories, $directory;
}
}
}
die "Must give -c class_name argument $!" if $$refClassName eq "";
push @$refStartingDirectories, '.' if scalar (@$refStartingDirectories ) == 0;
}
sub checkCommandLineArguments
{
{
# getopts butchers @ARGV, so have to use it on a local version.
local @ARGV = @ARGV;
our $opt_h;
&getopts('hc'); # Have to specify all options given or getopts will die.
&printUsageAndExit if $opt_h;
}
my $className;
{
# getopts butchers @ARGV, so have to use it on a local version.
local @ARGV = @ARGV;
while (@ARGV){
my $arg = shift @ARGV;
if ($arg =~ /Q-c/){
$className = shift @ARGV;
&printUsageAndExit if $className =~ /^s*$/ ;
return;
}
}
}
&printUsageAndExit;
}
sub printUsageAndExit
{
print "Usage:nn";
print "$0 -c class_name_to_search_for [ -directories startingDirectory1 startingDirectory2 ...]nn";
print "Example:nn";
print "findJarContainingClass.pl -c ApplicationMaster -directories /home/lylez/Hadoop/hadoop-2.x/hadoop-2.2.0/share/hadoop/yarn/sources /home/lylez/Hadoop/hadoop-2.x/hadoop-2.2.0/share/hadoop/yarnnn";
exit;
}
Lyle Z
13 дек. 2013, в 00:42
Поделиться
Просто хотел упомянуть здесь, что сторонние партнеры могут искать какое-то определенное имя файла в jarfinder
Хотя он напрямую не отвечает на вопрос, но это не повредит:)
Надеюсь, что это поможет
Mark Bramnik
19 авг. 2013, в 06:46
Поделиться
Вы всегда можете добавить библиотеку Reference в свой проект в Eclipse, а затем в Package Browser, просто расширьте пакеты в JAR файле, пока не найдете нужный класс.
Das
16 авг. 2010, в 23:15
Поделиться
Ещё вопросы
- 1TextBox не обновляет свой визуальный элемент, когда определен формат строки
- 1Вычисление косинусного сходства между двумя тензорами в Керасе
- 0переменная объема не изменяется – angularjs
- 1Метеор не ждет результата от функции, возвращает неопределенное
- 0Отображение сообщения вне цикла while
- 0Angular.js каскадный выпадающий список – отображение двух моделей
- 0Переключение функций по нажатию кнопки
- 1System.ArgumentException: недопустимые символы в пути
- 1D3JS – Могу ли я сделать форсированный граф с отдельными узлами и как?
- 1Попытка реализовать аутентификацию JWT в узле. Получение несанкционированного доступа на защищенных маршрутах
- 0Ошибка входа в Java
- 0Работа со ссылочными переменными в C ++
- 0Загрузка данных об отдыхе в приложение Android Cordova с помощью AngularJs
- 1C # Сделать фон формы прозрачным (для отображения фона .png с полупрозрачными пикселями)
- 0как заставить сравнение даты работать?
- 0Как динамически в параметризованном конструкторе?
- 0ZF2 & Doctrine2 getServiceConfig функция подключения к фабрикам
- 0Назначение класса из определенного тега
- 0Что не так с этим кодом REST API?
- 2WildFly: ошибка при запуске
- 1Несколько объектов, которые будут объявлены во время выполнения для модифицированной модели
- 0Способ загрузить все необходимые зависимости kde, чтобы начать работать над программированием kde?
- 0Чтение еще одной строки при разборе CSV в PHP
- 1TargetInvocationException при запуске проекта на wp7
- 1включить поддержку Java8 в Eclipse?
- 0Как рассчитать размер оператора MySQL (не результаты запроса)
- 0MySQL: группировка по нескольким столбцам, не дающая точных результатов
- 1Простой переводчик языка
- 3Интеллидж андроид проект. Gradle 5.2.1. Причина: java.util.ConcurrentModificationException
- 0отправка почты с использованием бесплатной функции codignator, доставляемой как спам
- 1Управление вкладками Firefox в селене
- 0Процедура MSSQL не завершается из PHP
- 0Поле соответствия двигателя проверки
- 0CSS / HTML для отображения строк вертикальной таблицы (или эквивалент)
- 0JQuery ролловер, показать и скрыть
- 0JQuery Datepicker – ограничить опции TIME
- 0Ошибка при использовании активных записей для get_where и левого соединения
- 1Преобразовать ад обратного вызова в отложенный объект
- 1изменение цвета рамки текстового поля, если проверка не удалась
- 0Почему я должен использовать «ближайший», когда есть только один элемент с указанным именем класса?
- 0Загрузка нового контента в адаптивный слайдер
- 0Как получить значение из неполного объекта класса в PHP?
- 1Не могу получить содержимое некоторых табличных данных с веб-страницы
- 0Скрытое поле не появляется в PHP-скрипте
- 0функция select () во вкладках – Angular Bootstrap
- 0Как рассчитать с помощью php сумму с процентом НДС в PHP
- 0Laravel PHP: создание объекта по умолчанию из пустого значения ошибки
- 0Беда с setlocale
- 0Можем ли мы создать индекс для столбца, содержащего значения NULL в MySQL 5.7?
- 1как сопоставить скобки и внутренние буквы
Загрузить PDF
Загрузить PDF
Файл JAR представляет собой набор файлов, сжатых с помощью Java-инструментов. Разработчики Java обычно сжимают свои приложения и апплеты в одном файле JAR для упрощения распространения. Этот формат обычно используется с программным обеспечением, которое является портативным, а точнее функциональным между несколькими операционными системами. Это руководство поможет вам извлечь.
Шаги
-
1
Убедитесь, что Java SDK установлен (Java Platform Standard Edition Development Kit). Версия входит в состав JDeveloper Oracle. Может быть загружены непосредственно с Sun, а также ссылки, которая включена в раздел Источники и ссылки ниже.
-
2
Найдите файл jar.exe внутри этой папки Java SDK. По умолчанию он находится внутри папки “bin” в SDK. Типичное местоположение по умолчанию в Windows “C:Program FilesJavajdk1.x.x_xxbin”, с отображением версии JDK x.x_xx. Более новые версии могут иметь расположение по умолчанию установлено в “C:SunSDKjdkbin”.
-
3
Откройте окно командной строки или терминал, в зависимости от вашей операционной системы, и перейдите в эту папку Windows. Пример для Windows: введите cd C:Program FilesJavajdk1.6.0_05bin, чтобы добраться до папки “bin”.
-
4
Запустите утилиту jar.exe. Используйте параметры как “x” и “f”, чтобы указать, что вы извлекаете файлы из архива. Пример: jar xf MyDownloadedFile.jar извлечет все папки и файлы, сжатые внутри файла MyDownloadedFile.jar и поместит их в текущую папку.
Реклама
Советы
- Firefox 3.0 также может просматривать JAR-файлы, начиная файл как “jar:file://” и заканчивая “.jar!/”
- JRE – это среда выполнения, которая не включает в себя файл jar.exe и другие инструменты Java, которые содержатся в JDK.
- Все JAR- файлы автоматически откроются внутри интегрированной среды разработки Java (IDE), такой как JDeveloper. Чтобы использовать эти файлы вне среды, они должны быть сохранены в другом месте.
- JDeveloper поместит файл jar.exe внутри папки “jdk/bin” folder.
- Используйте параметр “-C”, для копирования для извлечения в другое место. Пример: jar xf MyDownloadedFile.jar -C “C:Documents and SettingsmyloginMy Documents”
- Многие кросс-платформенные приложения имеют доступ к файлам JAR «на лету», поэтому распаковка до доступа к ресурсам внутри этих файлов может и не понадобиться. Популярный пример – Mozilla Firefox, который использует Chrome для чтения JAR-файлов.
Реклама
Предупреждения
- Избегайте использования популярных утилит для сжатия и распаковки (то есть: 7zip, WinZip), так как они могут извлечь файлы без правильной капитализации и/или размещения папок.
Реклама
Об этой статье
Эту страницу просматривали 13 876 раз.
Была ли эта статья полезной?
Содержание
- Установка компонента Java
- Способ 1: Меню Java (TM) Platform SE
- Способ 2: Запуск в «Командной строке»
- Способ 3: Эмуляторы Java
- Sony Ericsson SDK
- Вопросы и ответы
Установка компонента Java
Чтобы иметь возможность запускать исполняемые файлы JAR без использования эмуляторов, на компьютер необходимо установить платформу Java. Устанавливается компонент как обычная программа.
Скачать Java с официального сайта
Способ 1: Меню Java (TM) Platform SE
Сразу нужно отметить, что возможности данного способа ограничены. Хотя последняя версия платформы Java поддерживает запуск файлов JAR, далеко не факт, что конкретная Java-программа будет выполнена. Способ прост: кликните правой кнопкой мыши по файлу JAR и выберите в контекстном меню опцию «Открыть с помощью» «Java (TM) Platform SE binary».
Если ничего не произойдет, переходите к следующему способу.
Способ 2: Запуск в «Командной строке»
Попробуйте запустить исполняемый файл в консоли, если Java-программа не запустится, — по крайней мере, команда запуска вернет описание ошибки, по которому можно будет установить характер проблемы.
- Запустите из контекстного меню или системного поиска «Командную строку» или «PowerShell» (можно с обычными правами).
- Сформируйте и выполните команду вида
java -jar "D:executablejarfile.jar"
, где содержимое кавычек – это путь к исполняемому файл JAR.
Способ 3: Эмуляторы Java
Лучше всего для запуска приложений Java использовать специальные программы-эмуляторы, из которых самым известным, универсальным и наиболее функциональным является KEmulator Lite. В настоящее время официальный сайт разработчика недоступен, но приложение по-прежнему можно найти в свободном доступе в интернете. Рекомендуем использовать русифицированную портативную версию эмулятора.
- Скачайте архив с программой, распакуйте в удобное расположение и запустите исполняемый файл KEmulator.exe.
- Выберите в меню «Файл» → «Загрузить jar…» и укажите путь к файлу приложения или игры JAR.
Если файл не запустится или эмулятор выдаст ошибку, возможно, что-то не так с самим JAR-файлом либо для полноценной работы эмулятора требуются дополнительные компоненты, в частности Java SE Development.
Sony Ericsson SDK
В качестве альтернативы маловесному KEmulator Lite можно попробовать полноценную платформу виртуализации Java-приложений Sony Ericsson SDK. Официальный сайт разработчика более недоступен, однако эмулятор по-прежнему находится в свободном доступе. Также для этого понадобится набор библиотек Java SE Development Kit и утилита JADMaker, которую также придется поискать на просторах интернета.
Скачать Java SE Development Kit с официального сайта
- Скачайте Sony Ericsson SDK, Java SE Development Kit (рекомендуется версия 8u191 x86) и JADMaker.
- Установите сначала Java SE Development Kit, а затем Sony Ericsson SDK. Инсталляцию следует выполнять с настройками по умолчанию, если вдруг эмулятор попросит добавить себя в исключения брандмауэра Windows, на это нужно дать согласие. Архив с утилитой JADMaker распакуйте в удобное расположение, она понадобится позже. В начале установки Sony Ericsson SDK появится окошко с предложением автоматического обнаружения каталогов Java SE Development Kit, нажмите в этом окошке «Да».
- Установив набор библиотек и эмулятор Sony Ericsson, зайдите в меню «Пуск» и выберите опцию «Sony Ericsson» → «Default Device Selection».
- В открывшемся диалоговом окне выберите модель виртуального мобильного телефона, который станет использоваться по умолчанию.
- Запустите утилиту JADMaker и перетащите на ее окошко файл JAR, который будет преобразован в файл JAD. По умолчанию сконвертированный файл сохраняется в исходную папку.
- Откройте опять меню «Пуск» и запустите эмулятор, выбрав опцию «Sony Ericsson» → «Run WIDP Application».
- В открывшемся окне обзора укажите путь к сконвертированному в JAD файлу JAR.
- В результате откроется окно эмулятора с названием Java-приложения. Чтобы его запустить, нажмите кнопку «Launch».
К сожалению, использование даже такого мощного инструмента как Sony Ericsson SDK не гарантирует, что Java-приложение будет сразу же успешно запущено. Успех или неудача будут зависть от ряда факторов, как то: совместимость версии Java-приложения с эмулируемым мобильным устройством, а также сборки Windows 10. Так, по каким-то причинам в последних сборках этой системы платформа Sony Ericsson SDK работает некорректно.
Еще статьи по данной теме: