В этом уроке мы покажем вам, как использовать Maven для управления проектом Java – создайте, добавьте зависимости и упакуйте проект Java в исполняемый файл jar. В конце мы создадим исполняемый файл jar для хэширования заданной строки с помощью алгоритма SHA256.
Используемые технологии:
- Мавен 3.5.3
- JDK 8
- Кодек Apache Commons 1.11
1. Создайте проект из шаблона Maven
В терминале (*unix или Mac) или командной строке (Windows) перейдите в папку, в которой вы хотите создать проект Java. Введите эту команду:
mvn archetype:generate
-DgroupId={project-packaging}
-DartifactId={project-name}
-DarchetypeArtifactId={maven-template}
-DinteractiveMode=false
Это указывает Maven на создание Java-проекта из шаблона Maven. Например,
D:\>mvn archetype:generate -DgroupId=com.mkyong.hashing -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.992 s [INFO] Finished at: 2018-09-27T17:15:57+08:00 [INFO] ------------------------------------------------------------------------
Приведенная выше команда создаст проект Java из maven-archetype-quickstart шаблона.
2. Макет каталога Maven
Будет создана следующая структура каталогов проекта. Короче говоря, исходный код помещается в папку /src/main/java/ , код модульного теста вводит /src/тест/java/ .
P.S Приведенный выше рисунок взят из идеи IntelliJ, просто игнорируйте те .идея папка.
3. Файл POM
Просмотрите сгенерированный pom.xml . Он совершенно пустой, всего одна зависимость от JUnit.
4.0.0 com.mkyong.hashing java-project3 jar 1.0-SNAPSHOT java-project http://maven.apache.org junit junit 3.8.1 test
Этот файл POM похож на муравья build.xml файл, в нем описана вся информация о проекте, все, начиная со структуры каталогов, плагинов проекта, зависимостей проекта, способов создания этого проекта и т. Д., Прочитайте это официальное руководство по POM .
4. Обновить ПОМ
4.1 Добавьте свойства компилятора, чтобы указать Maven использовать указанную версию JDK для компиляции исходного кода.
UTF-8 1.8 1.8
4.2 Обновите JUnit до 4.12
junit junit 4.12 test
4.3 Добавить commons-кодек для хэширования SHA.
commons-codec commons-codec 1.11
4.4 Полная обновленная версия.
4.0.0 com.mkyong.hashing java-project jar 1.0-SNAPSHOT java-project http://maven.apache.org UTF-8 1.8 1.8 junit junit 4.12 test commons-codec commons-codec 1.11
5. Написать Код
5.1 Обновите App.java чтобы принять входные данные и хэшировать их с помощью алгоритма SHA-256.
package com.mkyong.hashing;
import org.apache.commons.codec.digest.DigestUtils;
public class App {
public static void main(String[] args) {
if (args.length < 1) {
System.err.println("Please provide an input!");
System.exit(0);
}
System.out.println(sha256hex(args[0]));
}
public static String sha256hex(String input) {
return DigestUtils.sha256Hex(input);
}
}
5.2 Модульный тест.
package com.mkyong.hashing;
import org.junit.Assert;
import org.junit.Test;
public class AppTest {
private String INPUT = "123456";
@Test
public void testLength() {
Assert.assertEquals(64, App.sha256hex(INPUT).length());
}
@Test
public void testHex() {
String expected = "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92";
Assert.assertEquals(expected, App.sha256hex(INPUT));
}
}
Сделано.
6. Сборка Maven
6.1 Позвольте построить его с помощью пакета mvn
D:\java-project>mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------< com.mkyong.hashing:java-project >------------------- [INFO] Building java-project 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] ...... ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.mkyong.hashing.AppTest Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.067 sec Results : Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ java-project --- [INFO] Building jar: D:\java-project\target\java-project-1.0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.956 s [INFO] Finished at: 2018-09-28T12:40:18+08:00 [INFO] ------------------------------------------------------------------------
Он компилирует, запускает модульный тест и упаковывает проект в файл jar и помещает его в папку project/target .
7. Запуск № 1
7.1 Запустите его. Ой… По умолчанию Maven не добавлял зависимости проекта commons-кодек в файл jar.
D:\java-project>java -cp target/java-project-1.0-SNAPSHOT.jar com.mkyong.hashing.App 123456
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/codec/digest/DigestUtils
at com.mkyong.hashing.App.sha256hex(App.java:18)
at com.mkyong.hashing.App.main(App.java:13)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.digest.DigestUtils
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 2 more
7.2 Чтобы решить эту проблему, мы можем использовать этот плагин maven-shade для создания uber/fat-jar – сгруппировать все в один файл jar.
org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade
7.3 Упакуйте его еще раз!
D:\java-project>mvn clean package [INFO] Scanning for projects... [... [INFO] --- maven-shade-plugin:3.2.0:shade (default) @ java-project --- [INFO] Including commons-codec:commons-codec:jar:1.11 in the shaded jar. [INFO] Replacing original artifact with shaded artifact. [INFO] Replacing D:\java-project\target\java-project-1.0-SNAPSHOT.jar with D:\java-project\target\java-project-1.0-SNAPSHOT-shaded.jar ...
Будут сгенерированы две банки, проверьте размер файла:
D:\java-project>dir target Volume in drive D is Samsung970 Volume Serial Number is 10DF-E63D Directory of D:\java-project\target 28/09/2018 12:57 PM 335,643 java-project-1.0-SNAPSHOT.jar 28/09/2018 12:57 PM 3,053 original-java-project-1.0-SNAPSHOT.jar ...
8. Запуск № 2
8.1 Запустите его снова. Хорошо, результат ожидаемый.
D:\java-project>java -cp target/java-project-1.0-SNAPSHOT.jar com.mkyong.hashing.App 123456 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
8.2 Можем ли мы запустить его как Jar? Нет, основного класса не существует.
D:\java-project>java -jar target/java-project-1.0-SNAPSHOT.jar 123456 no main manifest attribute, in target/java-project-1.0-SNAPSHOT.jar
8.3 Чтобы решить эту проблему, добавьте основной класс в maven-shade-плагин подобный этому.
org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.mkyong.hashing.App
9. Запуск № 3
9.1 Упакуйте его еще раз!
D:\java-project>mvn clean package
9.2 Запустите его как Jar.
D:\java-project>java -jar target/java-project-1.0-SNAPSHOT.jar 123456 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
Сделано.
10. ПОМ
Окончательный файл POM.
4.0.0 com.mkyong.hashing java-project jar 1.0-SNAPSHOT java-project http://maven.apache.org UTF-8 1.8 1.8 junit junit 4.12 test commons-codec commons-codec 1.11 org.apache.maven.plugins maven-shade-plugin 3.2.0 package shade com.mkyong.hashing.App
Скачать Исходный Код
Рекомендации
- Maven – Как создать проект веб-приложения Java
- Проект Apache Maven
- Простой проект Maven
- Пример хэширования Java SHA
- Как создать файл Jar, пример тонкой банки
- Создайте файл fat Jar – пример одной банки
- Создайте файл fat Jar – пример плагина Maven Shade
Оригинал: “https://mkyong.com/maven/how-to-create-a-java-project-with-maven/”