Как экспортировать внешние банки вместе с проектом при создании jar проекта [duplicate]

Измените свой класс, чтобы создать новую ссылку вместо того, чтобы использовать одну:

public class SomeObject{

    public String text;

    public SomeObject(String text){
        this.setText(text);
    }

    public String getText(){
        return text;
    }   

    public void setText(String text){
        this.text = new String(text);
    }
}

Вы можете использовать что-то вроде этого (я не претендую на идеальное решение):

public class SomeObject{

    private String text;

    public SomeObject(String text){
        this.text = text;
    }

    public SomeObject(SomeObject object) {
        this.text = new String(object.getText());
    }

    public String getText(){
        return text;
    }   

    public void setText(String text){
        this.text = text;
    }
}

Использование:

SomeObject s1 = new SomeObject("first");
SomeObject s2 = new SomeObject(s1);
s2.setText("second");
System.out.println(s1.getText()); // first
System.out.println(s2.getText()); // second
4
задан CrazyCoder 23 April 2017 в 00:10
поделиться

2 ответа

У вас есть 2 варианта:

  • извлекать зависимость в банке артефакта, чтобы приложение было единственным исполняемым банком со всеми зависимостями
  • связать зависимые банки через Manifest.MF и скопировать их рядом с основным банком приложения

Я подготовил образец проекта, который демонстрирует оба подхода: HelloWithDependencies.zip .

Артефакты создаются в каталоги out\single и out\linked.

Релевантные конфигурации:

7
ответ дан CrazyCoder 15 August 2018 в 22:57
поделиться
  • 1
    Вы просто помогли мне исправить проблему, которую я потратил более 25 часов, возможно, 2 недели, пытаясь расшифровать. Большое спасибо! Кроме того, это работает и все, но какова основа этого? Использует ли IntelliJ Maven или Ant или что-то в этом роде? – Zodiac Zubeda 14 February 2017 в 09:16
  • 2
    Вы можете использовать проекты на основе Maven, да, но это не связано с ситуацией, которая у вас есть. Когда вы добавляете новые зависимости к проекту, они не добавляются автоматически к артефактам, которые у вас уже есть, вам нужно снова просмотреть конфигурацию артефакта и добавить все недостающие библиотеки, необходимые для запуска вашего приложения из банки. Другая распространенная ошибка заключается в том, чтобы включить одну банку в другую банку, которая не будет работать, банку нужно либо распаковать внутри основной банки, либо скопировать рядом с ней и связать через манифест (не забудьте добавить какие-либо новые банки в манифест в том дело). – CrazyCoder 14 February 2017 в 09:20
  • 3
    В проекте на основе Maven можно использовать плагины Maven для создания банок с зависимостями, и вы создадите финальные артефакты, запустив цель Maven вместо использования артефактов IntelliJ IDEA. Таким образом, все новые зависимости, которые вы добавляете к pom.xml, автоматически появятся в банке, созданной Maven. В значительной степени то же самое относится к проектам на базе Gradle. – CrazyCoder 14 February 2017 в 09:23
  • 4
    Где в него вписываются ресурсы, например изображения? – Zodiac Zubeda 16 February 2017 в 08:04
  • 5
    Обычно ресурсы переходят в каталог resources (тот, который настроен как корень ресурсов). В примере проекта это тот же каталог, где вы видите файл log4j.properties. Вы можете добавить больше корней ресурсов, если вам нужно, и файлы из этих каталогов появятся в выводе компилятора, поэтому вам не нужно настраивать конфигурацию артефакта. – CrazyCoder 16 February 2017 в 09:11

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

  1. Сделайте установку своей библиотеки, как показано ниже mvn install:install-file -Dfile=myJar.jar -DgroupId=com.yourproject -DartifactId=yourproject -Dversion={version} -Dpackaging=jar.
  2. Используйте системный путь, как описано здесь здесь .

Вариант 1 предпочтительнее, так как вам не нужно держать банку в своем проекте.

1
ответ дан Community 15 August 2018 в 22:57
поделиться
  • 1
    На самом деле я не знаю, используется ли Maven. Я не создал никаких файлов сборки. Не знаю, как это делает IDEA, но мое предположение заключалось в том, что файл сборки не нужен. Все есть файл MANIFEST.MF. – Zodiac Zubeda 13 February 2017 в 07:43
Другие вопросы по тегам:

Похожие вопросы: