메뉴바에서 Tools > Build System > New Build System 을 선택하면 창이 새로 열린다.

{
	"cmd": ["gradlew.bat"]
	,"working_dir": "$file_path"
}

파일 작성을 완료하고 저장을 선택하면

[SublimeText 설치폴더]\Data\Packages\User 폴더가 기본위치로 열린다.

파일앞의 untitled 부분을 원하는 이름(예: gradle.sublime-build)으로 수정하고 저장한다.


Tools > Build System 의 목록에 저장한 파일명으로 빌드가 추가 된다. 해당 빌드를 선택한다.

프로젝트의 gradlew.bat, build.gradle 이 있는 위치에서 Build (Ctrl + B) 를 실행한다.


- ${file_path} 는 현재 파일을 실행하는 폴더를 지정한다. (없어도 돌아감..)


- 윈도우즈에서 build 결과 창의 한글이 깨져 나온다. "encoding": "cp949" 을 추가하면 한글이 정상적으로 보인다.


- task 를 수행하려 한다면 gradle.sublime-build 를 열어서 "cmd" : ["gradlew.bat", "TASK 이름"] 을 적어주면 된다.(귀찮..)

Posted by KENSIN
,

설정 변경이 필요할 때마다 jar 를 변경하지 않도록 설정 파일등은 외부로 빼도록 해보자.

여기서는 log4j2.xml 설정을 외부로 옮기고 log도 파일로 기록되도록 설정한다.


resource 폴더의 log4j2.xml 설정파일을 수정

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
		</Console>
		<File name="MyFile" filename="logs/app.log">
			<PatternLayout>
				<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
			</PatternLayout>
		</File>
	</Appenders>
	<Loggers>
		<Root level="DEBUG">
			<!-- <appenderref ref="MyFile" /> -->
			<AppenderRef ref="Console" />
		</Root>
	</Loggers>
</Configuration>


pom.xml 의 plugin 설정 변경, jar플러그인에 열외 항목을 추가하고, resource 관리를 통해 외부 폴더로 파일을 옮겨준다.

<plugins>
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-jar-plugin</artifactId>
		<configuration>
			<excludes>
				<exclude>**/log4j2.xml</exclude>
			</excludes>
			<archive>
				<manifest>
					<mainClass>printTime.GetTime</mainClass>
					<addClasspath>true</addClasspath>
					<classpathPrefix>libs/</classpathPrefix>
				</manifest>
			</archive>
		</configuration>
	</plugin>
</plugins>

<resources>
	<resource>
		<directory>src/main/resources</directory>
		<targetPath>../conf</targetPath>
	</resource>
</resources>


jar를 실행해 보자. conf 파일을 외부로 뺐으므로 옵션을 선언해준다.

java -Dlog4j.configurationFile=conf\log4j2.xml -jar printTime.jar


폴더구조는 아래와 같다.


libs 폴더를 외부에 두지 않고 모든 라이브러리를 내부에 포함하고자 한다면 몇가지 플러그인을 사용하여 처리할 수 있다. shade 플러그인을 적용해 본다.

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<executions>
		<execution>
			<goals>
				<goal>shade</goal>
			</goals>
			<configuration>
				<shadedartifactAttached>true</shadedartifactAttached>
				<transformers>
					<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
						<manifestEntries>
							<Main-Class>printTime.GetTime</Main-Class>
							<Class-Path>.</Class-Path>
							<Build-Number>1</Build-Number>
						</manifestEntries>
					</transformer>
				</transformers>
			</configuration>
		</execution>
	</executions>
</plugin>

maven build > goals = "package shade:shade"


폴더구조는 아래와 같다.


libs 폴더는 jar 내부에 포함된다.



Posted by KENSIN
,

구동에 필요한 의존성 라이브러리를 모두 (외부폴더로)포함해서 jar 를 생성하도록 해본다.


pom.xml 에서 jar 플러그인을 수정하고 dependency 플러그인을 추가하고 설정한다.

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-jar-plugin</artifactId>
	<configuration>
		<archive>
			<manifest>
				<mainClass>printTime.GetTime</mainClass>
				<addClasspath>true</addClasspath>
				<classpathPrefix>libs/</classpathPrefix>
			</manifest>
		</archive>
	</configuration>
</plugin>

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-dependency-plugin</artifactId>
	<version>2.5.1</version>
	<executions>
		<execution>
			<id>copy-dependencies</id>
			<phase>package</phase>
			<goals>
				<goal>copy-dependencies</goal>
			</goals>
			<configuration>
				<includeScope>runtime</includeScope>
				<outputDirectory>${project.build.directory}/libs/</outputDirectory>
			</configuration>
		</execution>
	</executions>
</plugin>


libs 폴더를 추가하고 해당 폴더에 라이브러리들을 넣어 주도록 설정하였다.


jar 플러그인은 클래스패스 선언을 관리하여 MANIFEST.MF 에 넣어줄것이고, dependency 플러그인은 폴더를 생성하고 라이브러리들을 복사하여 줄것이다.


Maven build goals = package 를 진행해 보자. 


생성된 jar 의 MANIFEST.MF 를 살펴보면 아래와 같다.


Manifest-Version: 1.0

Archiver-Version: Plexus Archiver

Built-By: macdev

Class-Path: libs/log4j-api-2.11.1.jar libs/log4j-core-2.11.1.jar

Created-By: Apache Maven 3.3.9

Build-Jdk: 1.8.0_77

Main-Class: printTime.GetTime


Class-Path 가 추가된것을 확인할 수 있다.


jar가 생성된 폴더에 libs 폴더도 생성되었고 libs 폴더 내부에 로그 라이브러리들도 들어 있다.

별도의 classpath 를 불러 올 필요가 없어졌다. 실행해 보도록 하자.


java -jar printTime-1.0.0.jar

 







Posted by KENSIN
,

프로그램 실행시 작업을 수행하고 로그를 남길수 있도록 해본다.


컴파일러를 명확하게 지정하고 로그를 기록하기 위한 플러그인을 추가해 보도록 한다.


pom.xml 수정


1. 버전관리를 한곳에 모아 보기 좋도록 버전값을 속성화 한다. (root 아래)

<properties>
	<jdk.version>1.8</jdk.version>
	<log4j2.version>2.11.1</log4j2.version>
</properties>


2. logging 라이브러리 의존성 추가 (root 아래)

<dependencies>
	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-api</artifactId>
		<version>${log4j2.version}</version>
	</dependency>

	<dependency>
		<groupId>org.apache.logging.log4j</groupId>
		<artifactId>log4j-core</artifactId>
		<version>${log4j2.version}</version>
	</dependency>
</dependencies>


3. compile 플러그인 추가. (build > plugins 에 삽입)

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-compiler-plugin</artifactId>
	<version>3.5.1</version>
	<configuration>
		<source>${jdk.version}
		<target>${jdk.version}</target>
	</configuration>
</plugin>


4. Maven build 실행 하면 jar 생성


jar 실행하여 확인.


java -classpath "printTime-1.0.0.jar;[경로]\log4j-api-2.11.1.jar;[경로]\log4j-core-2.11.1.jar" printTime.GetTime



현상태에서의 MANIFEST.MF 의 내용은 아래와 같다.

Manifest-Version: 1.0

Archiver-Version: Plexus Archiver

Built-By: macdev

Created-By: Apache Maven 3.3.9

Build-Jdk: 1.8.0_77

Main-Class: printTime.GetTime


폴더구조는 아래와 같다.





Posted by KENSIN
,