Рубрики
Без рубрики

Maven – Как создать проект Java

– Maven – Как создать проект Java

В этом уроке мы покажем вам, как использовать Maven для управления проектом Java – создайте, добавьте зависимости и упакуйте проект Java в исполняемый файл jar. В конце мы создадим исполняемый файл jar для хэширования заданной строки с помощью алгоритма SHA256.

Используемые технологии:

  1. Мавен 3.5.3
  2. JDK 8
  3. Кодек 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
                                
                            
                        
                    
                
            
			
        
    

Скачать Исходный Код

Рекомендации

  1. Maven – Как создать проект веб-приложения Java
  2. Проект Apache Maven
  3. Простой проект Maven
  4. Пример хэширования Java SHA
  5. Как создать файл Jar, пример тонкой банки
  6. Создайте файл fat Jar – пример одной банки
  7. Создайте файл fat Jar – пример плагина Maven Shade

Оригинал: “https://mkyong.com/maven/how-to-create-a-java-project-with-maven/”