Я хотел бы иметь JAVA-приложение, которое может быть легко запущено.
До сих пор мне удалось создать файл банки, но я еще не вижу преимуществ. Прежде чем я запущу свое приложение "java HelloWorldSwing", и теперь я использую "Java - банка HelloWorldSwing.jar" (который еще более сложен, чем предыдущая команда и, насколько я понял, использование файла банки требует присутствия *.mf файла в том же каталоге).
Я хотел бы иметь одну из этих двух следующих ситуаций:
Всего один единственный файл, который может быть скопирован в другую операционную систему и что проект может быть запущен только, нажимает на этот файл в файловом браузере (в данный момент, если нажимают на мой файл банки, Ubuntu начинает извлекать архив (потому что банка является архивом, я знаю)).
Создайте пиктограмму, которая может быть помещена на рабочий стол и нажатие, которое инициирует мою программу Java.
Создание исполняемого файла без зависимостей относительно легко. Вам просто нужно указать в MANIFEST
основной класс для использования. Затем его можно запустить с помощью java -jar ExecutableJar.jar
, но большинство ОС в этом случае поддерживают двойной щелчок.
Создание jar-файла , который зависит от другого исполняемого файла jar , является более сложной задачей. Вы можете указать путь к классу в МАНИФЕСТЕ
, но это все равно означает, что вам нужно скопировать более одного jar-файла для распространения приложения. Другой способ - «упаковать» зависимую банку в основную.
Вы можете сделать все это с помощью maven и maven-assembly-plugin . Используйте предварительно сконфигурированный дескриптор jar-with-dependencies
.
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
Основной класс можно указать примерно так:
<archive>
<manifest>
<mainClass>org.company.MyClass</mainClass>
</manifest>
</archive>
РЕДАКТИРОВАТЬ : Полный pom.xml
можно найти в этом вопросе .
Вот несколько ссылок, которые могут помочь вам ..
JSmooth - это исполняемая оболочка Java. Он создает собственные средства запуска Windows
http://jsmooth.sourceforge.net/
Межплатформенная исполняемая оболочка Java
http://launch4j.sourceforge.net/
http://www.captain.at/programming/java/executable-java-application.php
Помимо философии ООП, описанной в других ответах, я думаю, что основное использование абстрактного класса - это своего рода скелет.
Это полезно, когда вы разрабатываете приложение или работаете с командой, потому что у вас есть базовый код для работы и расширяет его близко к интерфейсу, но с более продвинутым рабочим процессом.
-121--2471814-Вы можете указать полный путь. То есть
LIBS += ../datelib/bin/libdatelib_release.so.1.0.0
Однако я бы рекомендовал вам сделать то, что предложили bmargulies: создать symolic ссылку и добавить -ldatelib_release
-121--4716268-Можно создать исполняемый jar-файл, как описано ниже:
http://csdl.ics.hawaii.edu/~johnson/613f99/modules/04/jar-files.html
Затем пользователи могут щелкнуть его в браузере файлов и запустить основной класс, если это разрешено ОС и настройками безопасности пользователя.
Мне очень нравится, как maven создает их: http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Make
Launch4J позволяет сделать JAR-файл доступным для запуска на многих платформах.
Он называется WebStart ,
Однако он не полностью соответствует вашему описанию. Он не обеспечивает самоупаковывающееся решение, которое должно существовать.
PS. Я лично считаю, что исполняемый файл jar - это шутка, вы не можете контролировать vmargs, не можете иметь хороший значок, и вы даже не можете знать, что он исполняемый, пока его не распакуют и не попытаются выполнить.
Если вам нужна простая функциональность, вы можете использовать адаптер Microsoft Loopback Adapter. Чтобы установить его, используйте средство devcon. Вот некоторая информация об этом http://support.microsoft.com/kb/311272 . devcon -r install% WINDIR %\Inf\Netloop.inf * MSLOOP После этого можно использовать WMI-запрос с C # для получения нового имени подключения, а затем netsh для его настройки (т. е. netsh int ip set address name = "Подключение по локальной сети 2" static 192.168.0.3 255.0.0.0)
-121--2856383-Похоже, вы просто хотите ограничить тип топлива, которое поступает в ваш дизельный автомобиль. Что-то вроде:
public class Fuel
{
public Fuel()
{
}
}
public class Diesel: Fuel
{
}
public class Car<T> where T: Fuel
{
public Car()
{
}
public void FillTank(T fuel)
{
}
}
public class DieselCar: Car<Diesel>
{
}
Сделал бы трюк, например
var car = new DieselCar();
car.FillTank(/* would expect Diesel fuel only */);
По сути, то, что вы делаете здесь, это позволяет автомобиль
иметь определенные типы топлива. Он также позволяет создать автомобиль, который бы поддерживал любой тип Fuel
(шанс был бы прекрасной вещью!). Тем не менее, в вашем случае, ChargingCar, вы просто извлекаете класс из автомобиля и ограничиваете его использованием только дизельного
топлива.
Вы должны создать исполняемую банку с упоминанием вашего основного класса (т.е. общедоступного класса с основным () методом в нем) в файле манифеста банка в качестве главного класса. Так что когда prople дважды щелкните его или введите: jar "your jar name" в командной консоли, то они получат его выполнено.