설정 변경이 필요할 때마다 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
,