성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Visual Studio Code의 Java 확장을 이용한 간단한 프로젝트 구축</h1> <p> Visual Studio Code 용 Java 확장이 나왔습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Java Extensions for Visual Studio Code ; <a target='tab' href='https://code.visualstudio.com/docs/java/extensions'>https://code.visualstudio.com/docs/java/extensions</a> Java Extension Pack ; <a target='tab' href='https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack'>https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack</a> </pre> <br /> 간단하게 사용해 볼까요? ^^<br /> <br /> 일단, Java Extension Pack을 설치하고 나면 곧바로 Code 탭에 "Java Overview"가 뜨면서 "Java Development Kit Required"라는 설명과 함께 OpenJDK를 다운로드할 수 있는 버튼이 나옵니다. 기본값으로 "OpenJDK 11"이 링크되어 있는데 그냥 ^^ 변경 없이 그대로 누릅니다. (참고로, OpenJDK11U-jdk_x64_windows_hotspot_11.0.3_7.msi 다운로드는 되었는데 진행이 안 된다면 "<a target='tab' href='웹 브라우저에서 파일 다운로드 후 "Running security scan"이 끝나지 않는 문제'>http://www.sysnet.pe.kr/2/0/11970</a>" 글을 참고하세요.)<br /> <br /> 그다음, "Java Extension Pack"에 포함된 "Maven for Java" 도구에서 사용할 maven을 설치해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Maven ; <a target='tab' href='https://maven.apache.org/download.cgi'>https://maven.apache.org/download.cgi</a> ; <a target='tab' href='http://apache.mirror.cdnetworks.com/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip'>http://apache.mirror.cdnetworks.com/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.zip</a> </pre> <br /> JDK와 Maven이 준비되었으면 이제 JAVA_HOME 환경 변수와 maven 실행 경로를 PATH에 등록해 줍니다. 만약 환경 변수 등록이 부담스럽다면 Visual Studio Code의 Settings(Ctrl + ,)에서 "java.home"과 "maven.executable.path"를 이용해 다음과 같은 식으로 지정해도 무방합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > { "maven.executable.path": "D:\\java\\maven\\bin\\mvn.cmd", "java.home": "C:\\Program Files\\AdoptOpenJDK\\jdk-11.0.3.7-hotspot" } </pre> <br /> <hr style='width: 50%' /><br /> <br /> 자, 그럼 프로젝트를 생성해야겠지요. ^^<br /> <br /> "Ctrl + Shift + P"(또는 F1)을 눌러 "Maven: Generate from Maven Archetype" 메뉴를 선택합니다. 이어지는 메뉴에서는 "maven-archetype-quickstart"를 선택한 다음, 프로젝트가 생성될 폴더(제 경우에는 D:\temp)를 지정합니다. 중간 단계로 다음의 정보를 묻는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Define value for property 'groupId': Define value for property 'artifactId': Define value for property 'version' 1.0-SNAPSHOT: : Define value for property 'package' : : </pre> <br /> 그냥 <a target='tab' href='https://johngrib.github.io/wiki/groupId-artifactId/'>'groupId'와 'artifactId'</a>에 "testapp"이라고 적고 진행하겠습니다. 나머지 물음에는 Enter 키를 쳐서 기본값으로 넘어가고 최종적으로 묻는 "Y" 단계에서 'y'키를 누르면 기본적인 maven 프로젝트 구조가 D:\temp\testapp 디렉터리에 생성되고, 프로젝트 구성을 pom.xml 파일에 담게 됩니다.<br /> <br /> 그러니까, .NET Core와 비교하자면 지금까지 "dotnet new console" 명령어로 초기 프로젝트 구성을 마친 것과 유사합니다. .NET Core의 경우 csproj 파일의 역할을 maven에서는 pom.xml 파일이 대신합니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 이제 생성된 D:\temp\testapp\testapp 경로를 Visual Studio Code로 열고 ./src/main/java/testapp 폴더에 있는 App.java 파일을 열어,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > package testapp; public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } } </pre> <br /> 코드를 작성하면 됩니다. 물론 Ctrl + F5 키로 실행하거나, BraekPoint를 걸고 F5 키를 눌러 디버깅을 진행할 수 있습니다. 만약 명령행에서 실행하고 싶다면 TERMINAL 창에서 다음과 같이 입력하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS D:\temp\testapp> <span style='color: blue; font-weight: bold'>java -cp .\target\classes testapp.App</span> Hello World! </pre> <br /> 또는 (환경 변수 PATH에 mvn.cmd 경로를 등록한 경우) pom 파일이 있는 디렉터리에서 mvn install을 실행하면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS D:\temp\testapp> <span style='color: blue; font-weight: bold'>mvn install</span> </pre> <br /> .\target 폴더에 testapp-1.0-SNAPSHOT.jar 파일이 생성됩니다. 이렇게 생성한 jar는 다음과 같이 실행할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PS D:\temp\testapp> <span style='color: blue; font-weight: bold'>java -cp .\target\testapp-1.0-SNAPSHOT.jar testapp.App</span> Hello World! </pre> <br /> 참고로, Visual Studio Code에서도 TERMINAL에서 "mvn install"을 실행했을 때와 동일한 결과를 "Maven for Java" 확장에서 추가한 명령어("Maven: Execute commands")로 "pom.xml" 파일 선택과 함께 "install" 명령어를 수행해 얻을 수 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> (이하의 pom.xml 추가 구성은 회사 동료에게 물어서 알게 된 것입니다. ^^)<br /> <br /> 닷넷의 경우 NuGet을 통해 외부 라이브러리를 가져다 쓰는데요, maven도 이러한 패키지 라이브러리 매니저가 제공됩니다. 예를 들어, commons-codec 라이브러리를 쓰고 싶다면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Apache Commons Codec ; <a target='tab' href='https://mvnrepository.com/artifact/commons-codec/commons-codec'>https://mvnrepository.com/artifact/commons-codec/commons-codec</a> </pre> <br /> "Maven: Add a dependency" 메뉴를 통해 "commons-codec"을 검색어로 repo에서 제공하는 패키지를 선택합니다. (제 경우에는 "commons-codec commons-codec" 항목을 선택했습니다.) 그럼 pom.xml에 /project/dependencies 하위로 다음의 노드가 추가됩니다. (달리 말하면, "Maven: Add a dependency" 명령어를 사용하지 않고 pom.xml에 dependency 노드를 수작업으로 입력해도 됩니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>20041127.091804</version> </dependency> </pre> <br /> 그런데, 이상하군요. 버전이 "20041127.091804"로 나오는데, 해당 repo를 가보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Apache Commons Codec ; <a target='tab' href='https://mvnrepository.com/artifact/commons-codec/commons-codec'>https://mvnrepository.com/artifact/commons-codec/commons-codec</a> </pre> <br /> 2005년 11월에 나온 가장 낮은 버전이 들어 있습니다. 정책은 알 수 없지만, 어쨌든 그냥 1.12 버전으로 바꾸면 최신 버전의 라이브러리가 적용됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <span style='color: blue; font-weight: bold'><version>1.12</version></span> </dependency> </pre> <br /> 이후, 해당 라이브러리에 포함된 기능을 사용할 수 있습니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > package testapp; <span style='color: blue; font-weight: bold'>import org.apache.commons.codec.binary.*;</span> public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); byte[] buffer = new byte[] { 0, 1, 2 }; System.out.println(<span style='color: blue; font-weight: bold'>Hex.encodeHexString</span>(buffer)); } } </pre> <br /> <hr style='width: 50%' /><br /> <br /> .NET의 NuGet도 라이브러리를 로컬의 NuGet cache 폴더에 별도 보관을 하는 것처럼, Maven도 마찬가지로 다음의 폴더에 의존성을 가진 라이브러리를 다운로드해서 공유하게 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [maven repo 경로] %USERPROFILE%\.m2\repository [예제에서 추가한 commons-codec 경로] %USERPROFILE%\.m2\repository\commons-codec\commons-codec\1.10 </pre> <br /> 따라서 의존성이 있는 라이브러리를 "mvn install"로 생성하는 출력 디렉터리에 포함하고 싶다면 /project/build/plugins 하위에 다음의 노드를 추가해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <plugin> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>process-sources</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${targetdirectory}</outputDirectory> </configuration> </execution> </executions> </plugin> </pre> <br /> 이후 "mvn install" 명령어를 수행하면 ".\target\dependency" 폴더에 pom.xml에서 의존성을 가진 패키지들을 생성해 둡니다. 따라서 명령행에서 실행한다면 다음과 같이 해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > java -cp ".\target\testapp-1.0-SNAPSHOT.jar;.\target\dependency\*" testapp.App </pre> <br /> 나아가서, 만약 의존성이 있는 라이브러리들을 testapp-1.0-SNAPSHOT.jar 자체에 추가하고 싶다면 위의 plugin과 마찬가지로 /project/build/plugins 노드의 하위에 다음의 내용을 추가해야 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>3.1.1</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </pre> <br /> 그런 다음 다시 mvn install을 수행하면 .\target 폴더에 "testapp-1.0-SNAPSHOT-jar-with-dependencies.jar" 파일이 생성되고, 따라서 단일 jar 파일로 명령행에서 수행이 가능합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > java -cp .\target\testapp-1.0-SNAPSHOT-jar-with-dependencies.jar testapp.App </pre> <br /> 이 정도면, 앞으로 간단한 유형의 Java 프로젝트들은 쉽게 구성할 수 있을 것입니다. ^^<br /> <br /> (<a target='tab' href='https://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1482&boardid=331301885'>첨부 파일은 이렇게 구성한 예제 프로젝트</a>입니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, "Maven: Add a dependency" 명령어 수행 시 다음과 같은 오류가 발생한다면?<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Commnad "maven.project.addDependency" fails. Only support POM file with single <project>node. </pre> <br /> Visual Studio Code에서 pom.xml 파일을 열어두고 그 편집 창을 선택한 상태에서 "Maven: Add a dependency" 명령어를 실행해야 합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1682
(왼쪽의 숫자를 입력해야 합니다.)