Как сделать так, чтобы один модуль Maven зависел от другого?

Функции стрелок - наиболее широко используемая функция ES6 до сих пор ...

Использование: все функции ES5 должны быть заменены функциями стрелок ES6, за исключением следующих сценариев:

Функции стрелок НЕ должны использоваться:

  1. Когда мы хотим, чтобы функция hoisting как функции стрелок была анонимной.
  2. Когда мы хотим использовать this / arguments в функции, поскольку функции стрелки не имеют this / arguments, они зависят от их внешнего контекста.
  3. Когда мы хотим использовать именованную функцию, поскольку функции стрелок анонимны.
  4. Когда мы хотим использовать функцию как constructor, поскольку функции стрелки не имеют своих this.
  5. Когда мы хотим добавить функцию как свойство в объектный литерал и использовать в ней объект, поскольку мы не можем получить доступ к this (который должен быть самим объектом).

Давайте рассмотрим некоторые из вариантов функций стрелок, которые лучше понять:

Вариант 1: Когда мы хотим передать более одного аргумента функции и вернуть некоторые

Версия ES5 :

var multiply = function (a,b) {
    return a*b;
};
console.log(multiply(5,6)); //30

Версия ES6 :

var multiplyArrow = (a,b) => a*b;
console.log(multiplyArrow(5,6)); //30

Примечание: ключевое слово function НЕ требуется. => требуется. {} являются необязательными, когда мы не предоставляем {} return неявно добавляется JavaScript, и когда мы предоставляем {}, нам нужно добавить return, если нам это нужно.

Вариант 2: Если мы хотим передать ТОЛЬКО один аргумент функции и вернуть некоторое значение из него.

Версия ES5 :

var double = function(a) {
    return a*2;
};
console.log(double(2)); //4

Версия ES6 :

var doubleArrow  = a => a*2;
console.log(doubleArrow(2)); //4

Примечание: при передаче только одного аргумента мы можем опустить скобки ().

Вариант 3: когда мы НЕ хотим передавать какие-либо аргумент функции и НЕ хотите возвращать какое-либо значение.

Версия ES5 :

var sayHello = function() {
    console.log("Hello");
};
sayHello(); //Hello

Версия ES6 :

var sayHelloArrow = () => {console.log("sayHelloArrow");}
sayHelloArrow(); //sayHelloArrow

Вариант 4: Если мы хотим явно вернуться из функций стрелок.

Версия ES6 :

var increment = x => {
  return x + 1;
};
console.log(increment(1)); //2

Вариант 5: Когда мы хотим вернуть объект из функций стрелок.

Версия ES6 :

var returnObject = () => ({a:5});
console.log(returnObject());

Примечание: нам нужно обернуть объект в скобки (), в противном случае JavaScript не может различать блок и объект.

Вариант 6: Arro w не имеют arguments (массив, такой как объект), они зависят от внешнего контекста для arguments.

Версия ES6 :

function foo() {
  var abc = i => arguments[0];
  console.log(abc(1));
};    
foo(2); // 2

Примечание: foo - это функция ES5 с массивом arguments, подобным объекту, и переданный ему аргумент 2, поэтому для foo для arguments[0] установлено значение arguments[0].

abc - это функция стрелок ES6, так как у нее нет ее arguments, поэтому она выводит arguments[0] в foo, это внешний контекст.

Вариант 7: Функции стрелки НЕ имеют this, они зависят от внешнего контекста для this

Версия ES5 :

var obj5 = {
  greet: "Hi, Welcome ",
  greetUser : function(user) {
        setTimeout(function(){
        console.log(this.greet + ": " +  user); // "this" here is undefined.
        });
     }
};

obj5.greetUser("Katty"); //undefined: Katty

Примечание. Обратный вызов, переданный setTimeout, является ES5 и имеет свой собственный this, который не определен в среде use-strict, поэтому мы получаем выход:

undefined: Katty

Версия ES6 :

var obj6 = {
  greet: "Hi, Welcome ",
  greetUser : function(user) {
    setTimeout(() => console.log(this.greet + ": " +  user)); 
      // this here refers to outer context
   }
};

obj6.greetUser("Katty"); //Hi, Welcome: Katty

Примечание. Обратный вызов, переданный в setTimeout, является функцией стрелок ES6, и у него нет своего this, поэтому он берет его из внешнего контекста, который является greetUser, который имеет this, который является obj6, следовательно мы получаем выход:

Hi, Welcome: Katty

Разное: мы не можем использовать функцию new со стрелками. Функции стрелки не имеют свойства prototype. У нас нет привязки this, когда функция стрелки вызывается через apply или call.

13
задан Daniel Pryden 25 March 2010 в 08:30
поделиться

3 ответа

Maven полагается на концепцию двоичных зависимостей и разрешает их через локальный репозиторий. Другими словами, вам необходимо «установить» пакеты в вашем локальном репозитории, если у вас есть зависимости между ними, компиляции и упаковки кода недостаточно. И для этого вам нужно запустить install (который установит пакет в локальный репозиторий для использования в качестве зависимости в других проектах локально ).

Примечание: вы не должны вызывать mvn compile jar: jar , но предпочитаете пакет mvn . Во-первых, выполнение фазы пакета запустит все фазы перед пакетом (включая компиляцию ) и самим пакетом . Во-вторых, запуск ​​package вызовет jar: jar или war: war и т. Д. В зависимости от значения проекта. (подробнее об этом см. введение в жизненный цикл ). Это одна из сильных сторон Maven: вам не нужно знать, является ли проект JAR, WAR, EJB и т. Д., И выполнять соответствующую задачу по его упаковке. Просто запустите этап стандартизированного пакета , и Maven выполнит задание (используя привязки целей по умолчанию).

Это касалось теоретической части Maven. Внутри IDE все может немного отличаться, чтобы сделать работу с Maven более удобной. IDE могут использовать зависимости проекта (т.е.зависимости от кода внутри IDE) вместо двоичных зависимостей, так что изменения, сделанные в одном проекте, становятся видимыми в других модулях без необходимости запускать mvn install . Это случай Eclipse + M2Eclipse. И это относится также к NetBeans при следующем условии (см. Управление зависимостями ):

Подсказка: Если вы открываете проект, от которого зависят другие проекты , значок в другом проекты изменяются на значок "проект maven" , чтобы обозначить, что среда IDE знает о связи между проектами. Однако такая ссылка только {{1} }} устанавливается, когда groupId, artifactId и версия совпадают в объявлении зависимости и проекта . Часто возникающая проблема заключается в том, что вы меняете подпись API в своем библиотечном проекте, но приложение не запускается. Часто это вызвано тем, что приложение использует старую версию библиотечного артефакта. Значок артефакта может помочь вам отследить эти проблемы.

23
ответ дан 1 December 2019 в 20:00
поделиться

Вам необходимо запустить mvn install вместо mvn compile . Цель install скопирует созданный jar-файл в локальный репозиторий после его компиляции и упаковки. Если вы запустите только компиляцию, она только скомпилирует файлы классов в каталог target и не сделает их доступными для других проектов.

В Eclipse, если вы импортируете pom с верхнего уровня, он импортирует подпроекты в отдельные проекты Eclipse и устанавливает зависимости связанных проектов, а затем настраивает путь к классам каждого проекта так, чтобы он зависел от других. Я не знаком с Netbeans, но уверен, что есть способ сделать то же самое.

6
ответ дан 1 December 2019 в 20:00
поделиться

netbeans связывает проекты вместе по содержимому локального репозитория, поэтому в большинстве сценариев требуется установка mvn.

3
ответ дан 1 December 2019 в 20:00
поделиться
Другие вопросы по тегам:

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