728x90


저번에 실행가능한 jar파일을 만들어봤다.

이번에는 jar파일과 상관없이 그냥 실행을 한번 해보도록하자.

class파일을 실행하기 위해서는 플러그인이 필요하다.

플러그인은 여러분이 찾아서 쓰면된다.


https://www.mojohaus.org/exec-maven-plugin/


위의 사이트에서 exec-maven-plugin이라는 maven플러그인을 제공한다.

이번에는 이 플러그인을 사용해서 java명령어로 class파일을 실행하는 예제를 한번 해보도록하자.

일단 메이븐 프로젝트를 간단하게 만들어 보도록 하자.


mvn archetype:generate -DinteractiveMode=false -DgroupId=<패키지명> -DartifactId=<프로젝트명>


그러면 pom.xml을 보도록 하자.


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.theceres</groupId>
<artifactId>CommandLineMakeMaven</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>CommandLineMakeMaven</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>net.theceres.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>

이제 새로운 플러그인을 사용할 차례이다.

maven코드가 조금 글이진거 같지만 저번시간과 대비해서 봤을때 사실 새롭게 많이 추가된 코드는 없다고 할 수 있다.

그럼 새롭게 추가된 부분만 보도록 하자.


<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>net.theceres.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>

exec-maven-plugin은 사용할 수 있는 goal로 java를 선택하고 실행할 main클래스를 선택해준다.



해당 플러그인이 무슨 goal을 가졌는지는 홈페이지에 들어가서 확인해 봐야한다.

위의 경우 exec,help,java라는 세개의 플러그인을 가졌는데 우리는 java명령어를 사용할 것이므로 goal을 java로 한다.

그럼 실행해보도록하자.



실행할때 명령어는 위와 같다.


mvn <compile이후의 페이즈> exec:java


혹은


mvn <compile이후의 페이즈>

mvn exec:java


java를 실행하기 위해서는 무조건 선행되야할 작업이 바로 compile이므로 해당 페이즈이후의 작업을 선택한다.

필자는 package를 하긴했는데 그 전을 해도 상관없다.



보면 제대로 실행됨을 알 수 있다.

그런데 이 방법은 조금 귀찮다고 할 수 있다.

왜냐하면 exec:java를 사용하기 위해서 항상 선행 페이즈가 존재하기 때문이다.

그럼 둘을 같이하는 방법이 없을까?

다행히도 방법이 있다.


<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>net.theceres.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>

바로 phase라는 엘레멘트를 추가해준다.

이때 위의 경우 test를 예제로 썼다.

위를 해석하면 test를 할때 exec:java를 같이 해줘라는 뜻이다.


따라서 mvn test만 사용해도 위의 작업을 할 수 있다.






+ Recent posts