๐Ÿœ Ant ๋นŒ๋“œ๋กœ JAR ๋งŒ๋“ค๊ธฐ

EHOIยท2025๋…„ 2์›” 10์ผ

์ƒํ™ฉ

  • A ํ”„๋กœ์ ํŠธ์—์„œ ๋กœ์ง์„ ๊ฐœ๋ฐœํ•˜๋‹ค๊ฐ€ Exception์„ ๋˜์ ธ์•ผ ํ•˜๋Š” ์ƒํ™ฉ
  • ์˜ˆ์™ธ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์„ค์ •(httpStatus, message)์€ JAR ํ˜•์‹์œผ๋กœ B ํ”„๋กœ์ ํŠธ์˜ yml ํŒŒ์ผ์—์„œ ์ฝ์–ด ๋“ค์—ฌ์˜ค๊ณ  ์žˆ์—ˆ๋‹ค.
  • ํ•ด๋‹น ymlํŒŒ์ผ์—์„œ ๋ฉ”ํƒ€์— ๋งž์ง€ ์•Š์€ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ B ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘์—…ํ•˜๊ณ  ๋นŒ๋“œํ•˜์—ฌ ์ƒ์„ฑ๋œ jar ํŒŒ์ผ์„ A ํ”„๋กœ์ ํŠธ๋กœ ์˜ฎ๊ฒจ์˜ค๋ ค๊ณ  ๊ณ„ํš
  • build ๋ฅผ ํ•˜๋ ค๊ณ  ๋ดค๋”๋‹ˆ gradle ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ xml ํŒŒ์ผ์ด์—ˆ๊ณ  ํ•ด๋‹น ํŒŒ์ผ์„ ๋นŒ๋“œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Ant๋กœ ๋นŒ๋“œ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•จ

๊ทธ๋ž˜์„œ ์•„๋ž˜์˜ ๊ธ€์€ ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์ฐพ์•„๋ณด๊ณ  ์‹œ๋„ํ•˜๋ฉฐ ์•Œ๊ฒŒ ๋œ ๊ฒƒ๊ณผ ํ•ด๊ฒฐํ–ˆ๋˜ ์—๋Ÿฌ๋ฅผ ๊ธฐ๋กํ•œ ๊ฒƒ์ด๋‹ค.

Ant build

build๋ฅผ ํ•˜๋ ค๊ณ  gradle์„ ์ฐพ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ์•„๋ฌด๋ฆฌ ๋ด๋„ build.xml๋งŒ ์กด์žฌํ–ˆ๋‹ค. ์ฐพ์•„๋ณด๋‹ˆ Ant๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋นŒ๋“œ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค.

Ant๋Š” Gradle์ด๋‚˜ Maven๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ XML ๊ธฐ๋ฐ˜์˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๐Ÿ”จ ์ธํ…”๋ฆฌ์ œ์ด์—์„œ Ant ๋นŒ๋“œ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. Ant ๋นŒ๋“œ ๋„๊ตฌ ํ™œ์„ฑํ™”
    • View โ†’ Tool Windows โ†’ Ant Build๋ฅผ ์„ ํƒ
    • ๋˜๋Š” Ctrl + Shift + A (Cmd + Shift + A on Mac) ๋ฅผ ๋ˆ„๋ฅด๊ณ  "Ant Build" ๊ฒ€์ƒ‰ ํ›„ ์‹คํ–‰
  2. build.xml ํŒŒ์ผ ์ถ”๊ฐ€
    • Ant Build ์ฐฝ์ด ์—ด๋ฆฌ๋ฉด ์™ผ์ชฝ ์ƒ๋‹จ์˜ โž•(Add) ๋ฒ„ํŠผ ํด๋ฆญ
    • build.xml ํŒŒ์ผ์ด ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ํด๋”์—์„œ ์„ ํƒ
  3. JAR ๋นŒ๋“œ ์‹คํ–‰
    • Ant Build ์ฐฝ์—์„œ jar ๋˜๋Š” build ํƒ€๊ฒŸ์„ ์„ ํƒ ํ›„ ์‹คํ–‰ ๋ฒ„ํŠผ(โ–ถ) ํด๋ฆญ

๐Ÿ“„ build.xml ํ•ด์„ํ•˜๊ธฐ

๋นŒ๋“œ๋ฅผ ํ•ด์„œ jar๋ฅผ ๋งŒ๋“ค์—ˆ์ง€๋งŒ ์ด jar๊ฐ€ ์–ด๋””์— ์ƒ์„ฑ๋˜์—ˆ๋Š”์ง€, ๋ฌด์—‡์„ ๋ฐ”ํƒ•์œผ๋กœ ๋นŒ๋“œ๋ฅผ ํ•˜๋Š”์ง€ ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ build.xml์„ ํ•ด์„ํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.

๐Ÿ” JAR ํŒŒ์ผ ์ƒ์„ฑ ์œ„์น˜ ์ฐพ๋Š” ๋ฒ•

<target name="jar" depends="compile">
    <mkdir dir="dist"/>
    <jar destfile="dist/myproject.jar" basedir="build/classes"/>
</target>
  • ๋จผ์ € jar ํƒ€๊ฒŸ์„ ์ฐพ๋Š”๋‹ค.
  • mkdir ํƒœ๊ทธ๋ฅผ ๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋“ฏ dist ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ 
  • basedir์— ์ •์˜๋˜์–ด ์žˆ๋Š” build/classes ํด๋” ์•„๋ž˜์— ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ
  • destfile์— ์ •์˜๋˜์–ด ์žˆ๋Š” dist ํด๋” ์•„๋ž˜์— myproject.jar ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์งˆ ๊ฒƒ์ด๋‹ค.

๐Ÿ“Œ todir๊ณผ basedir์ด ์žˆ๋Š” ๊ฒฝ์šฐ

<target name="jar" depends="compile">
    <mkdir dir="output"/>
    <copy todir="output">
        <fileset dir="build/classes"/>
    </copy>
    <jar destfile="output/app.jar" basedir="output"/>
</target>
  • todir="output" โ†’ output/ ํด๋”๋กœ "build/classes" ์— ์žˆ๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์„๋ณต์‚ฌ
  • basedir="output" โ†’ output/์„ ๊ธฐ์ค€์œผ๋กœ JAR ์ƒ์„ฑ
  • ๊ฒฐ๊ณผ: output/app.jar ํŒŒ์ผ์ด ์ƒ์„ฑ๋จ

๊ทธ๋Ÿฐ๋ฐ ๋‚ด ๊ฒฝ์šฐ์—๋Š” ${} ๋ฌธ๋ฒ•์„ ํ†ตํ•ด์„œ ๋ณ€์ˆ˜๋ช…์„ ์ •์˜ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๐Ÿœ Ant์˜ property ์ฐธ์กฐ ๋ฐฉ์‹

${๋ณ€์ˆ˜๋ช…} ์—์„œ ํ•ด๋‹น ๋ณ€์ˆ˜๋Š”

  1. <property> ํƒœ๊ทธ์—์„œ ์ •์˜ํ•˜๊ฑฐ๋‚˜,
  2. ์™ธ๋ถ€ ํŒŒ์ผ/ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๐Ÿ” 1. build.xml ๋‚ด๋ถ€์—์„œ ์ •์˜๋œ ๊ฒฝ์šฐ

<project name="MyProject" default="jar" basedir=".">
    <property name="projectName" value="myproject_svc"/>
    <property name="dist" value="target/dist"/>
    <property name="dest" value="target/dest"/>
</project>

name ์†์„ฑ์œผ๋กœ ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ๋Š” ์‚ฌ์šฉํ•˜์ง€๋งŒ ์‹ค์ œ ๊ฐ’์€ value ์ด๋‹ค.

๐Ÿ” 2. ์™ธ๋ถ€ build.properties ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒฝ์šฐ

build.xml ๋‚ด๋ถ€์—์„œ ์†์„ฑ์„ ์ •์˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด, ์™ธ๋ถ€ ํŒŒ์ผ์—์„œ ๋กœ๋“œ๋  ์ˆ˜๋„ ์žˆ์–ด.

build.xml ์—์„œ ์ด์™€ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด build.properties ์— ์†์„ฑ์„ ์ •์˜ํ•ด๋‘” ๊ฒƒ์ด๋‹ค.

<property file="build.properties"/>

build.properties

projectName=myproject_svc
dist=target/dist
dest=target/dest

โœ๏ธ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ build.xml ์„ ์‚ดํŽด๋ณด๋ฉฐ ๋ฌธ๋ฒ• ์ •๋ฆฌํ•˜๊ธฐ

jar ํƒ€๊ฒŸ

<target name="jar" depends="clean, compile">
	<copy todir="${dist}">
		<fileset dir="src">
			<include name="**/*.yml" />
			<include name="**/*.xml" />
		</fileset>
	</copy>
	<jar basedir="${dist}" destfile="${dest}/${projectName}.jar" />
</target>
  • <target name="jar" depends="clean, compile"> : clean, compile ํƒ€๊ฒŸ์„ ๋จผ์ € ์‹คํ–‰ ํ›„ jar ํƒ€๊ฒŸ์„ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.
    • clean โ†’ ๊ธฐ์กด ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์‚ญ์ œ (์˜ˆ: dist ํด๋”๋‚˜ .class ํŒŒ์ผ ์‚ญ์ œ)
    • compile โ†’ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ .class ํŒŒ์ผ ์ƒ์„ฑ
  • <copy todir="${dist}">: ${dist} ๋””๋ ‰ํ† ๋ฆฌ์— ์•„๋ž˜์˜ ๋‚ด์šฉ์„ copy ํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • <fileset dir="src">: src ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ ๋ชจ๋‘๊ฐ€ ๊ทธ ๋Œ€์ƒ์ด๋ผ๋Š” ๋œป์ด๋‹ค.
  • <include name="**/*.yml" />, <include name="**/*.xml" /> ํŒŒ์ผ๋„ ํฌํ•จํ•˜๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.

clean ํƒ€๊ฒŸ

<target name="clean">
	<delete dir="${dist}" />
	<delete dir="${dest}" />
</target>
  • <delete dir="${dist}" />: ${dist} ๋””๋ ‰ํ† ๋ฆฌ ์‚ญ์ œ

prepare ํƒ€๊ฒŸ

<target name="clean">
	<mkdir dir="${dist}" />
	<mkdir dir="${dest}" />
</target>
  • <mkdir dir="${dist}" />: ${dist} ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

compile ํƒ€๊ฒŸ

<target name="compile" depends="prepare">
	<javac srcdir="src" destdir="${dist}" source="17" encoding="UTF-8" debug="true">
		<classpath refid="op_userclass_lib" />
	</javac>
</target>
  • javac๋Š” java compiler์˜ ์ค€๋ง์ด๋‹ค. ๊ธฐ์–ตํ•˜์ž
  • build.xml์—์„œ ์‚ฌ์šฉํ•˜๋Š” javac๋Š” Ant ๋นŒ๋“œ ๋„๊ตฌ์˜ ์ผ๋ถ€๋กœ, Ant๊ฐ€ ์ž๋™์œผ๋กœ Java ์ปดํŒŒ์ผ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
  • <classpath refid="op_userclass_lib" /> ์ด ๋ถ€๋ถ„์€ ์ปดํŒŒ์ผ ์‹œ ์‚ฌ์šฉ๋  ํด๋ž˜์ŠคํŒจ์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ถ€๋ถ„ refid="op_userclass_lib"๋Š” ํด๋ž˜์ŠคํŒจ์Šค๋ฅผ op_userclass_lib๋ผ๋Š” ์•„์ด๋””๋กœ ์ง€์ •๋œ ํด๋ž˜์ŠคํŒจ์Šค ์„ค์ •์„ ์ฐธ์กฐํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž„ โ†’ ๊ทธ๋ž˜์„œ ์•„๋ž˜์ฒ˜๋Ÿผ path ํƒœ๊ทธ๋กœ ์ •์˜๋ฅผ ํ•ด๋‘” ๊ฒŒ ๋ถ„๋ช… ์žˆ์„ ๊ฒƒ์ž„

path ํƒœ๊ทธ

<path id="op_userclass_lib">
    <fileset dir="libs">
        <include name="**/*.jar" />
    </fileset>
</path>

์ฆ‰, ๋นŒ๋“œ ๊ณผ์ •์€ ์ด๋ ‡๊ฒŒ ์ง„ํ–‰:

1๏ธโƒฃ clean ์‹คํ–‰ โ†’ ๊ธฐ์กด ๋””๋ ‰ํ† ๋ฆฌ ์‚ญ์ œ

2๏ธโƒฃ prepare ์‹คํ–‰ โ†’ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

3๏ธโƒฃ compile ์‹คํ–‰ โ†’ ์†Œ์Šค ์ฝ”๋“œ ์ปดํŒŒ์ผ (.java โ†’ .class)

4๏ธโƒฃ jar ์‹คํ–‰ โ†’ ์ปดํŒŒ์ผ๋œ .class ํŒŒ์ผ ๋ฐ ์„ค์ • ํŒŒ์ผ๋“ค์„ .jar๋กœ ๋ฌถ์Œ

profile
#์„ฑ์žฅ #๋‹จ๋‹จํ•จ #ํ‰์˜จํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€