오늘이라도
[Spring] 20. 공공 데이터 약국 API 출력, 구글 지도 API로 구글 지도 활용 본문
취업성공패키지 SW 개발자 교육/Spring
[Spring] 20. 공공 데이터 약국 API 출력, 구글 지도 API로 구글 지도 활용
upcake_ 2020. 7. 28. 11:01반응형
https://github.com/upcake/Class_Examples
교육 중에 작성한 예제들은 깃허브에 올려두고 있습니다.
gif 파일은 클릭해서 보는 것이 정확합니다.
- 공공 데이터 약국 API 출력, 구글 지도 API 활용 -
- 페이지 이동 후 지도가 제대로 작동이 안되는 문제가 있다.maven.apache.org/POM/4.0.0"
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>data list jsp</title>
<style type="text/css">
#map {
position: absolute;
width: 800px;
height: 600px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border: 3px solid #666;
display: none;
}
#map-background{
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background-color:#000;
opacity:0.3;
display: none;
}
/* include/page.jsp의 스타일 가져옴 */
.page_on, .page_off, .page_next, .page_last, .page_first, .page_prev {
display: inline-block;
line-height: 30px;
margin: 0;
}
.page_on, .page_off {
min-width:22px;
padding: 0 5px 2px;
}
.page_next, .page_last, .page_first, .page_prev {
text-indent: -99999999px;
border: 1px solid #d0d0d0;
width: 30px;
}
.page_on {
border: 1px solid gray;
background-color: gray;
color:#FFF;
font-weight: bold;
}
.page_next { background: url("img/page_next.jpg") center no-repeat; }
.page_last { background: url("img/page_last.jpg") center no-repeat; }
.page_prev { background: url("img/page_prev.jpg") center no-repeat; }
.page_first { background: url("img/page_first.jpg") center no-repeat; }
</style>
</head>
<body>
<h3>공공 데이터</h3>
<div class="btnSet dataOption">
<a class="btn-fill">약국 조회</a>
<a class="btn-empty">유기 동물 조회</a>
</div>
<div id="data-list" style="margin:20px 0 auto"></div>
<div class="btnSet">
<div class="page-list"></div>
</div>
<div id="map-background"></div>
<div id="map"></div>
<script type="text/javascript">
$('.dataOption a').click(function() {
//이미 선택된 내용에 대해서는 적용하지 않으려면
if( $(this).hasClass('btn-empty') ) {
$('.dataOption a').removeClass();
$(this).addClass('btn-fill');
var idx = $(this).index();
$('.dataOption a:not(:eq(' + idx + '))').addClass('btn-empty');
if( idx == 0) { pharmacy_list(1); }
else { animal_list(); }
}
});
pharmacy_list(1);
function pharmacy_list(page) {
$.ajax({
url:'data/pharmacy',
data: {pageNo: page},
success: function(data) {
console.log(data) //한글이 깨지는 현상 발생해서 commonservice와 컨트롤러에서 utf-8로 인코딩해줘야함
var tag = "<table class='pharmacy'>"
+ '<tr><th class="w-px200">약국명</th><th class="w-px140" >전화번호</th><th>주소</th></tr>';
$(data.item).each(function(){
tag += "<tr>"
+ "<td><a class='map' data-x=" + this.XPos + " data-y=" + this.YPos + ">" + this.yadmNm + "</a></td><td>" + this.addr + "</td><td class='left'>" + this.addr + "</td>"
+ "</tr>";
});
tag += "</table>";
$('#data-list').html(tag);
makePage( data.count, page );
}, error: function(text, req) {
alert(text + " : " + req.status)
}
});
}
function makePage( totalList, curPage ) {
var page = pageInfo(totalList, curPage, pageList, blockPage);
var tag = '';
if ( page.curBlock > 1 ) {
tag += "<a class='page_first' data-page=1>처음</a>"
+ "<a class='page_prev'data-page=" + (page.beginPage - blockPage) + ">이전</a>";
}
for(var no=page.beginPage; no <= page.endPage; no++ ) {
if( no==curPage ) {
tag += "<span class='page_on'>" + no + "</span>";
} else {
tag += "<a class='page_off' data-page=" + no + ">" + no + "</a>";
}
}
if (page.curBlock < page.totalBlock) {
tag += "<a class='page_next' data-page=" + (page.endPage + 1) + ">다음</a>"
+ "<a class='page_last' data-page=" + page.totalPage + ">마지막</a>";
}
$('.page-list').html(tag);
}
function pageInfo (totalList, curPage, pageList, blockPage) {
var page = new Object();
page.totalPage = parseInt(totalList/pageList) + (totalList % pageList == 0 ? 0 : 1);
page.totalBlock = parseInt(page.totalPage/blockPage) + (page.totalPage % blockPage == 0 ? 0 : 1);
page.curBlock = parseInt(curPage/blockPage) + (curPage % blockPage == 0 ? 0 : 1);
page.endPage = page.curBlock * blockPage;
page.beginPage = page.endPage - (blockPage - 1);
if( page.endPage > page.totalPage ) { page.endPage = page.totalPage; }
console.log(page)
return page;
}
function animal_list() {
}
//$('.map').click(function(){ }); 페이지가 다 로딩되기전에 준비되는 함수라 작동이 안될수 있다.
$(document).on('click', '.page-list a', function(){
pharmacy_list( $(this).data('page') );
}).on("click", ".map", function() { //이런 형태로 작성해야한다.
$("#map, #map-background").css("display", "block");
//developers.google.com/maps/documentation/javascript/overview?_ga=2.124987530.1447651499.1595900798-1296965659.1595900772&hl=ko 구글 맵 플랫폼 자바스크립트 api
var pos = {lat: $(this).data('y'), lng: $(this).data('x')} //latitude : Xpos, 위도 longitude : Ypos, 경도
var map = new google.maps.Map(document.getElementById('map'), {
center: pos,
zoom: 15
});
/*
new google.maps.Marker({
map:map, position: pos, title:$(this).text()
});
*/
var info = new google.maps.InfoWindow();
info.setOptions({
content:"<div>" + $(this).text() + "</div>"
});
info.open(map, new google.maps.Marker({
map:map, position: pos
}));
});
$('#map-background').click(function() {
$("#map, #map-background").css("display", "none");
});
var pageList = 10, blockPage = 10; //페이지당 보여질 목록 수, 블럭당 보여질 페이지 수
</script>
<!-- key=구글 API 키 -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCsrerDHJrp9Wu09Ij7MUELxCTPiYfxfBI">
</script>
</body>
</html>
▲list.jsp
package common;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
@Service
public class CommonService {
public void sendEmail(String email, String name, HttpSession session) {
//1. 기본 이메일 전송 처리
//sendSimple(email, name);
//2. 첨부 파일 있는 이메일 전송 처리
//session이 있어야 파일 첨부가 가능
//sendAttach(email, name, session);
//3. HTML 태그 이메일 전송 처리
sendHtml(email, name, session);
//4. 공공 데이터 REST API 요청 처리
};
private void sendSimple(String email, String name) {
SimpleEmail mail = new SimpleEmail();
mail.setHostName("smtp.naver.com"); //메일 전송 서버 지정, 네이버 메일 - 환경설정 - pop3 설정
mail.setCharset("utf-8"); //인코딩 설정
mail.setDebug(true); //메일 전송 과정 추적해서 콘솔에 띄워줌
mail.setAuthentication("아이디", "비밀번호"); //로그인하기 위해 정보 입력
mail.setSSLOnConnect(true); //입력한 정보로 로그인 요청
try {
mail.setFrom("보내는 메일", "관리자"); //보내는 사람 메일 / 이름 설정
mail.addTo(email, name); //받는 사람 메일 / 이름, 회원가입 페이지에에서 가져온다.
mail.addTo("받을 메일", "수신자"); //복수의 사람 지정 가능
mail.setSubject("회원가입 축하"); //메일 제목
mail.setMsg(name + "님! 가입을 축하드립니다!"); //메일 내용
mail.send(); //메일 발송
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private void sendAttach(String email, String name, HttpSession session) {
MultiPartEmail mail = new MultiPartEmail();
mail.setHostName("smtp.naver.com"); //메일 전송 서버 지정, 네이버 메일 - 환경설정 - pop3 설정
mail.setCharset("utf-8"); //인코딩 설정
mail.setDebug(true); //메일 전송 과정 추적해서 콘솔에 띄워줌
mail.setAuthentication("아이디", "비밀번호"); //로그인하기 위해 정보 입력
mail.setSSLOnConnect(true); //입력한 정보로 로그인 요청
try {
mail.setFrom("보내는 메일", "관리자"); //보내는 사람 메일 / 이름 설정
mail.addTo(email, name); //받는 사람 메일 / 이름, 회원가입 페이지에에서 가져온다.
mail.addTo("받을 메일", "수신자"); //복수의 사람 지정 가능
mail.setSubject("첨부 파일 테스트"); //메일 제목
mail.setMsg(name + "님! 가입을 축하드립니다!\n 첨부 파일 테스트"); //메일 내용
//파일 첨부하기
EmailAttachment file = new EmailAttachment();
//① 물리적 디스크내 파일 첨부
file.setPath("D:\\이력서-자소서-양식.hwp");
mail.attach(file);
//② 프로젝트 내의 파일 첨부
file = new EmailAttachment();
file.setPath(session.getServletContext().getRealPath("resources/images/logo.png"));
mail.attach(file);
//③ URL을 통해 파일 첨부
file = new EmailAttachment();
file.setURL(new URL("https://mvnrepository.com/assets/images/392dffac024b9632664e6f2c0cac6fe5-logo.png"));
mail.attach(file);
mail.send(); //메일 발송
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
private void sendHtml(String email, String name, HttpSession session) {
HtmlEmail mail = new HtmlEmail();
mail.setHostName("smtp.naver.com"); //메일 전송 서버 지정, 네이버 메일 - 환경설정 - pop3 설정
mail.setCharset("utf-8"); //인코딩 설정
mail.setDebug(true); //메일 전송 과정 추적해서 콘솔에 띄워줌
mail.setAuthentication("아이디", "비밀번호"); //로그인하기 위해 정보 입력
mail.setSSLOnConnect(true); //입력한 정보로 로그인 요청
try {
mail.setFrom("보내는 메일", "관리자"); //보내는 사람 메일 / 이름 설정
mail.addTo(email, name); //받는 사람 메일 / 이름, 회원가입 페이지에에서 가져온다.
mail.addTo("받을 메일", "수신자"); //복수의 사람 지정 가능
mail.setSubject("HTML 메일 테스트");
StringBuffer msg = new StringBuffer();
msg.append("<html>");
msg.append("<body>");
msg.append("<a href='https://mvnrepository.com'><img src='https://mvnrepository.com/assets/images/392dffac024b9632664e6f2c0cac6fe5-logo.png' /></a>");
msg.append("<hr>");
msg.append("<h3>HTML 메일 테스트</h3>");
msg.append("<p>가입을 축하드립니다.</p>");
msg.append("<p>HTML 메일 테스트</p>");
msg.append("</body>");
msg.append("</html>");
mail.setHtmlMsg(msg.toString());
EmailAttachment file = new EmailAttachment();
file.setPath(session.getServletContext().getRealPath("resources/css/common.css"));
mail.attach(file);
file = new EmailAttachment();
file.setURL(new URL("https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"));
mail.attach(file);
mail.send();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
//첨부 파일 업로드 처리////////////////////////////////////////////////////////
public String upload(String category, MultipartFile file, HttpSession session) {
//서버의 업로드할 물리적 위치
// workspace/.metadata/....../wtpwebapps/iot/resources
String resources = session.getServletContext().getRealPath("resources");
String upload = resources + "/upload";
//업로드할 파일의 형태 : .../upload/notice/2020/07/13/abc.txt
//String folder = upload + "/upload/2020/07/13";
String folder = upload + "/" + category + "/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date());
//폴더가 없다면 폴더를 생성
File f = new File(folder);
if(!f.exists()) { f.mkdirs(); } //폴더가 존재하지 않으면 경로 생성
//동시 다발적 동일명의 파일 업로드를 위한 고유 ID 부여: afd324adfa_abc.txt
String uuid = UUID.randomUUID().toString() + "_" + file.getOriginalFilename();
try {
file.transferTo( new File(folder, uuid) );
} catch (Exception e) {
System.out.println(e.getMessage());
}
// /upload/.../asdfadsfsa_abc.txt ▶ 업로드한 파일의 경로를 반환
// ① folder.replace(resources, "")
// ② folder.substring(resources.length()) + "/" + uuid;
return folder.substring(resources.length()) + "/" + uuid;
} //upload()
//첨부 파일 다운로드 처리///////////////////////////////////////////////////////
public File download(String filename, String filepath, HttpSession session, HttpServletResponse response) {
File file = new File(session.getServletContext().getRealPath("resources") + filepath);
//filepath에 resources/ << 슬래쉬부터의 경로가 저장되어 있다
String mime = session.getServletContext().getMimeType(filename);
response.setContentType(mime);
try {
filename = URLEncoder.encode(filename, "utf-8").replaceAll("\\+", "%20");
// + 는 기호라 \ 필요, \ 또한 기호라 \ 필요
// %20 = 스페이스바
response.setHeader("content-disposition", "attachment; filename=" + filename);
ServletOutputStream out = response.getOutputStream();
FileCopyUtils.copy(new FileInputStream(file), out);
out.flush();
} catch(Exception e) {
System.out.println(e.getMessage());
}
return file;
} //download()
// 공공 데이터 REST API 요청 처리=========================================================================
public String xml_list(StringBuilder url) {
String result = url.toString();
try {
HttpURLConnection conn
= (HttpURLConnection)new URL( result ).openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
BufferedReader rd;
if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
rd = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
} else {
rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(), "utf-8"));
}
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();
conn.disconnect();
result = sb.toString();
System.out.println(result);
}catch(Exception e) {
System.out.println(e.getMessage());
}
return result;
}
//JSON
public String json_list(StringBuilder url) {
JSONObject json = null; //JSONObject 클래스를 사용하기 위해 메이븐에서 JSON.simple 라이브러리 추가
try {
json = (JSONObject) new JSONParser().parse( xml_list(url) );
json = (JSONObject) json.get("response");
json = (JSONObject) json.get("body");
int count = json.get("totalCount") == null ? 0 : Integer.parseInt(json.get("totalCount").toString());
if (json.get("items") instanceof JSONObject) { //instanceof 타입 비교 키워드
json = (JSONObject) json.get("items");
}
json.put("count", count);
} catch (Exception e) {
System.out.println(e.getMessage());
}
return json.toJSONString();
}
}
▲CommonService.java
package com.hanul.iot;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import common.CommonService;
@Controller
public class DataController {
private String key = "FPgj2NXbJw46TcGkmAfZEiYFDbxilys7KLjk3KaB7AfeJE00ZhPNM0M8unwbsI69fSmT8SNfVEimE6ZZ2U14hA%3D%3D";
@Autowired private CommonService common;
@RequestMapping("/list.da")
public String data(HttpSession session) {
session.setAttribute("category", "da");
return "data/list";
}
//약국 정보 조회 요청
@ResponseBody @RequestMapping(value="/data/pharmacy", produces="applications/json; charset=utf-8")
public String pharmarcy_list(int pageNo) {
StringBuilder url
= new StringBuilder("http://apis.data.go.kr/B551182/pharmacyInfoService/getParmacyBasisList");
url.append("?ServiceKey=" + key);
url.append("&_type=json"); //parameter가 _type이라 _가 붙음
url.append("&pageNo=" + pageNo);
return common.json_list(url);
}
}
▲DataController.java
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hanul</groupId>
<artifactId>iot</artifactId>
<name>iot</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.2.2.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<!-- 스프링에서 JDBC를 사용하기 위한 dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<!-- DBCP dependency -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle.ojdbc/ojdbc8 -->
<!-- 오라클용 jdbc ojdbc8 -->
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<!-- Mybatis 프레임워크를 사용하기 위한 dependency -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<!-- MyBatis 스프링 dependency -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!-- 화면에 template를 지정하는 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.apache.tiles/tiles-jsp -->
<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>
<!-- boolean 타입 데이터를 문자 타입으로 자동 변환해주는 라이브러리 -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.0</version>
</dependency>
<!-- 이메일 전송 라이브러리 -->
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
<!-- 파일 첨부(업로드) 라이브러리 -->
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- JSON Simple 라이브러리 -->
<!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple -->
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>1.8</source>
<target>1.6</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
▲pom.xml
반응형
'취업성공패키지 SW 개발자 교육 > Spring' 카테고리의 다른 글
[Spring] 21. 약국 조회 리스트뷰, 그리드뷰, 페이징 구현 (0) | 2020.07.29 |
---|---|
[Spring] 19. 방명록 만들기 ⑤ : 덧글 수정, 삭제 / 공공 데이터 API 가져오기 (0) | 2020.07.27 |
[Spring] 18. 방명록 만들기 ④ : 사진 미리보기, 덧글 기능 (0) | 2020.07.24 |
[Spring] 17. 방명록 만들기 ③ : 글 상세 조회, 수정 (0) | 2020.07.23 |
[Spring] 16. 방명록 만들기 ② : 첨부파일 미리보기, 게시글 표시 갯수, 게시판 표시 형태 (0) | 2020.07.22 |