데비안 9.9 에서 이클립스와 openjdk 1.8 궁합이 살짝 아쉽네요.

emptynote의 이미지

저는 자바 개발자라 이클립스라는 IDE 를 껴 안고 삽니다.

데비안에서도 이클립스 설치하여 구동할 수 있는데

데비아 9.9 버전에서는 자바8인 openjdk 1.8 이 기본인 반면

이클립스는 jdk 1.7까지만 지원하는 3.8.1 버전이네요.

문제는 제가 JDK 1.8 문법인 람다를 도입해서 에러가 쭉 나온다는 것입니다.

코드 깔끔한것은 둘째치고 jdbc connection 이라는 자원 반환을 확실하게 보장하기 위해서

성능 오버헤드가 있음에도 불구하고 JDK 1.8 문법인 람다를 도입했는데 망했네요.

"개발 환경으로써 리눅스를 활용하고 있으며 좋아요" 이 한마디 하려고

개인 프로젝트 개발 환경을 debian 에서도 쉽게 구축할 수 있도록 howto 문서 작성중인데 세상사 뜻대로 안되네요.

윈도 모니터보다 리눅스 모니터가 더 커서 리눅스에서 개발을 하다가

윈도10 PC를 구입하면서 같이산 모니터가 더 커서 지금은 윈도10에서 주로 개발중인데

윈도10에서는 최신 버전으로 다운로드 받아 사용하다 보니 이런 사태가 왔네요.

서버 비지니스 로직을 다룰때 jooq 가 핵심 라이브러리이고 jooq 는 JDK 1.8 이상을 요구하기에 JDK 1.7 로 돌아갈 수 없기에 답답하네요.

어떤 분 말만 따라 ㅋㅋㅋ 날리며 개발 환경으로써 리눅스 활용하지 말고 주변 사람한테 추천도 하지 마세요 라고 말해야 할까요.

저는 좀 삐딱해서 그리는 못하겠네요.

emptynote의 이미지

이클립스(Neon.1a Release 4.6.1) 를 다운 받아 데비아 9.9 에서 사용중인데요.

수동으로 이클립스 환경을 제가 맞춘것과 동일하게 할려면 매우 번거롭기때문에

자동화 지원할 목적으로 eclipse 에서 import 한방으로 동일하게 맞추게 하고자

윈도 10 에 있는 workbench 에 있는 .project 와 .classpath 파일을 데비안으로 옮겨 오기 위해서

경로 다른것을 맞추어줄 프로그램까지 작성해서 옮겨 왔는데

JDK 라이브러리가 java 5 이하로 판단하여 junit 애노테이션에 에러를 발생시키네요.

ant install 로 설치할 수 있는 이클립스는 jdk 1.7 까지 지원하는 이클립스이고

그래서 수동으로 이클립스 최신 버전 다운 받아 사용하려고 노력~~~~~~을 했지만

결국은 import 한방 처리후에도 수동 작업이 필요한 상황이네요.

울고 싶네요 ㅠ.ㅠ

emptynote의 이미지

이제 import 한방으로 가능합니다.

.settings 경로에 org.eclipse.jdt.core.prefs 파일을 추가했더니 잘 되네요.

eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8

아래 프로그램을 고생하여 작성한 보람이 있어 기쁘네요 ^^

package kr.pe.codda.common.buildsystem;
 
import java.io.File;
 
import io.netty.util.internal.logging.InternalLogger;
import io.netty.util.internal.logging.InternalLoggerFactory;
import kr.pe.codda.common.buildsystem.pathsupporter.CommonBuildSytemPathSupporter;
import kr.pe.codda.common.etc.CommonStaticFinalVars;
import kr.pe.codda.common.exception.BuildSystemException;
import kr.pe.codda.common.util.CommonStaticUtil;
 
public class EclipseBuilder {
	private InternalLogger log = InternalLoggerFactory.getInstance(EclipseBuilder.class);
 
	private String installedPathString = null;
 
	public EclipseBuilder(String installedPathString) throws BuildSystemException {
		if (null == installedPathString) {
			throw new IllegalArgumentException("the parameter installedPathString is null");
		}
 
		checkValidPath("the installed path", installedPathString);
 
		this.installedPathString = installedPathString;
	}
 
	private void checkValidPath(String title, String targetPathString) throws BuildSystemException {
		File targetPath = new File(targetPathString);
		if (!targetPath.exists()) {
			String errorMessage = new StringBuilder(title).append("[").append(targetPathString)
					.append("] does not exist").toString();
			throw new BuildSystemException(errorMessage);
		}
 
		if (!targetPath.isDirectory()) {
			String errorMessage = new StringBuilder(title).append("[").append(targetPathString)
					.append("] isn't a directory").toString();
			throw new BuildSystemException(errorMessage);
		}
	}
 
	private void createCoddaAllEclipeProjectXMLFile(String eclipseProjectName, EclipsePath[] eclipsePathList)
			throws BuildSystemException {
		String commonResourcesPathString = CommonBuildSytemPathSupporter
				.getCommonResourcesPathString(installedPathString);
 
		String coddaCoreAllEclipeProjectXMLFilePathString = new StringBuilder().append(commonResourcesPathString)
				.append(File.separator).append("eclipse").append(File.separator).append("workbench")
				.append(File.separator).append(eclipseProjectName).append(File.separator).append(".project").toString();
 
		// log.info("coddaCoreAllEclipeProjectXMLFilePathString=[{}]", coddaCoreAllEclipeProjectXMLFilePathString);
 
		File coddaCoreAllEclipeProjectXMLFile = new File(coddaCoreAllEclipeProjectXMLFilePathString);
 
		StringBuilder coddaCoreAllEclipeProjectXMLFileContentsStringBuilder = new StringBuilder()
				.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append(CommonStaticFinalVars.NEWLINE)
				.append("<projectDescription>").append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("<name>")
				.append(eclipseProjectName)
				.append("</name>")
				.append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("<comment></comment>").append(CommonStaticFinalVars.NEWLINE).append("	").append("<projects>")
				.append(CommonStaticFinalVars.NEWLINE).append("	").append("</projects>")
				.append(CommonStaticFinalVars.NEWLINE).append("	").append("<buildSpec>")
				.append(CommonStaticFinalVars.NEWLINE).append("		").append("<buildCommand>")
				.append(CommonStaticFinalVars.NEWLINE).append("			")
				.append("<name>org.eclipse.jdt.core.javabuilder</name>").append(CommonStaticFinalVars.NEWLINE)
				.append("			").append("<arguments>").append(CommonStaticFinalVars.NEWLINE).append("			")
				.append("</arguments>").append(CommonStaticFinalVars.NEWLINE).append("		").append("</buildCommand>")
				.append(CommonStaticFinalVars.NEWLINE).append("	").append("</buildSpec>")
				.append(CommonStaticFinalVars.NEWLINE).append("	").append("<natures>")
				.append(CommonStaticFinalVars.NEWLINE).append("		")
				.append("<nature>org.eclipse.jdt.core.javanature</nature>").append(CommonStaticFinalVars.NEWLINE)
				.append("	").append("</natures>").append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("<linkedResources>");
 
		String installedPathStringForEclipseRelativePath = installedPathString.replaceAll("\\\\", "/");
 
		for (EclipsePath eclipsePath : eclipsePathList) {
			coddaCoreAllEclipeProjectXMLFileContentsStringBuilder.append(CommonStaticFinalVars.NEWLINE)
					.append("		").append("<link>").append(CommonStaticFinalVars.NEWLINE).append("			")
					.append("<name>").append(eclipsePath.getPathName()).append("</name>")
					.append(CommonStaticFinalVars.NEWLINE).append("			").append("<type>2</type>")
					.append(CommonStaticFinalVars.NEWLINE).append("			").append("<location>")
					.append(installedPathStringForEclipseRelativePath).append("/").append(eclipsePath.getRelativePath())
					.append("</location>").append(CommonStaticFinalVars.NEWLINE).append("		").append("</link>");
		}
 
		coddaCoreAllEclipeProjectXMLFileContentsStringBuilder.append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("</linkedResources>").append(CommonStaticFinalVars.NEWLINE).append("</projectDescription>");
 
		String coddaCoreAllEclipeProjectXMLFileContents = coddaCoreAllEclipeProjectXMLFileContentsStringBuilder
				.toString();
 
		// log.info("coddaCoreAllEclipeProjectXMLFileContents=[{}]", coddaCoreAllEclipeProjectXMLFileContents);
 
 
		try {
			CommonStaticUtil.saveFile(coddaCoreAllEclipeProjectXMLFile, coddaCoreAllEclipeProjectXMLFileContents,
					CommonStaticFinalVars.SOURCE_FILE_CHARSET);
		} catch (Exception e) {
			String errorMessage = new StringBuilder()
					.append("fail to create the eclise .project file[")
					.append(coddaCoreAllEclipeProjectXMLFilePathString)
					.append("] becase io error occured").toString();
 
			log.warn(errorMessage, e);
			throw new BuildSystemException(errorMessage);
		}
	}
 
	private void createCoddaAllEclipeClasspathXMLFile(String eclipseProjectName, EclipsePath[] eclipsePathList,
			String[] eclipseLibiaryRelativePathStringList) throws BuildSystemException {
		String commonResourcesPathString = CommonBuildSytemPathSupporter
				.getCommonResourcesPathString(installedPathString);
 
		String coddaCoreAllEclipeClasspathXMLFilePathString = new StringBuilder().append(commonResourcesPathString)
				.append(File.separator).append("eclipse").append(File.separator).append("workbench")
				.append(File.separator).append(eclipseProjectName).append(File.separator).append(".classpath")
				.toString();
 
		// log.info("coddaCoreAllEclipeClasspathXMLFilePathString=[{}]", coddaCoreAllEclipeClasspathXMLFilePathString);
 
		File coddaCoreAllEclipeClasspathXMLFile = new File(coddaCoreAllEclipeClasspathXMLFilePathString);
 
		StringBuilder coddaCoreAllEclipeClasspathXMLFileContentsStringBuilder = new StringBuilder()
				.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>").append(CommonStaticFinalVars.NEWLINE)
				.append("<classpath>").append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("<classpathentry kind=\"con\" path=\"org.eclipse.jdt.junit.JUNIT_CONTAINER/4\"/>")
				.append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("<classpathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"/>")
				.append(CommonStaticFinalVars.NEWLINE).append("	")
				.append("<classpathentry kind=\"output\" path=\"bin\"/>");
 
		for (EclipsePath eclipsePath : eclipsePathList) {
			coddaCoreAllEclipeClasspathXMLFileContentsStringBuilder.append(CommonStaticFinalVars.NEWLINE).append("	")
					.append("<classpathentry kind=\"src\" path=\"").append(eclipsePath.getPathName()).append("\"/>");
		}
 
		String installedPathStringForEclipseRelativePath = installedPathString.replaceAll("\\\\", "/");
 
		for (String eclipseLibiaryRelativePathString : eclipseLibiaryRelativePathStringList) {
			coddaCoreAllEclipeClasspathXMLFileContentsStringBuilder.append(CommonStaticFinalVars.NEWLINE).append("	")
					.append("<classpathentry kind=\"lib\" path=\"").append(installedPathStringForEclipseRelativePath)
					.append("/").append(eclipseLibiaryRelativePathString).append("\"/>");
		}
 
		coddaCoreAllEclipeClasspathXMLFileContentsStringBuilder.append(CommonStaticFinalVars.NEWLINE)
				.append("</classpath>");
 
		String coddaCoreAllEclipeClasspathXMLFileContentsString = coddaCoreAllEclipeClasspathXMLFileContentsStringBuilder
				.toString();
 
		// log.info("coddaCoreAllEclipeClasspathXMLFileContentsString=[{}]", coddaCoreAllEclipeClasspathXMLFileContentsString);
 
 
		try {
			CommonStaticUtil.saveFile(coddaCoreAllEclipeClasspathXMLFile, coddaCoreAllEclipeClasspathXMLFileContentsString,
					CommonStaticFinalVars.SOURCE_FILE_CHARSET);
		} catch (Exception e) {
			String errorMessage = new StringBuilder()
					.append("fail to create the eclise .classpath file[")
					.append(coddaCoreAllEclipeClasspathXMLFilePathString)
					.append("] becase io error occured").toString();
 
			log.warn(errorMessage, e);
			throw new BuildSystemException(errorMessage);
		}
	}
 
 
	public void createCoddaCoreAllEclipeWorkbenchFiles() throws BuildSystemException {
		String eclipseProjectName = "codda_core_all";
 
		EclipsePath[] eclipsePathList = { new EclipsePath("core_common_main_src", "core/common/src/main/java"),
				new EclipsePath("core_common_test_src", "core/common/src/test/java"),
				new EclipsePath("core_client_main_src", "core/client/src/main/java"),
				new EclipsePath("core_server_main_src", "core/server/src/main/java"),
				new EclipsePath("core_all_test_src", "core/all/src/test/java") };
 
		String[] eclipseLibiaryRelativePathStringList = { "core/server/lib/main/ex/commons-dbcp2-2.0.1.jar",
				"core/server/lib/main/ex/commons-pool2-2.5.0.jar", "core/common/lib/test/commons-exec-1.3.jar",
				"core/common/lib/test/byte-buddy-1.7.9.jar", "core/common/lib/test/byte-buddy-agent-1.7.9.jar",
				"core/common/lib/test/mockito-core-2.13.4.jar", "core/common/lib/test/objenesis-2.6.jar",
				"core/logger/lib/ex/jcl-over-slf4j-1.7.25.jar", "core/logger/lib/ex/logback-classic-1.2.3.jar",
				"core/logger/lib/ex/logback-core-1.2.3.jar", "core/logger/lib/ex/slf4j-api-1.7.25.jar",
				"core/logger/dist/codda-logger.jar", "core/common/dist/codda-core-junitlib.jar" };
 
		createCoddaAllEclipeProjectXMLFile(eclipseProjectName, eclipsePathList);
 
		createCoddaAllEclipeClasspathXMLFile(eclipseProjectName, eclipsePathList, eclipseLibiaryRelativePathStringList);
	}
 
	public void createCoddaCoreLoggerEclipeWorkbenchFiles() throws BuildSystemException {
		String eclipseProjectName = "codda_logger";
 
		EclipsePath[] eclipsePathList = { new EclipsePath("main_src", "core/logger/src/main/java")};
 
		String[] eclipseLibiaryRelativePathStringList = { "core/logger/lib/ex/commons-logging-1.2.jar",
				"core/logger/lib/ex/log4j-1.2.17.jar", 
				"core/logger/lib/ex/log4j-api-2.11.0.jar",
				"core/logger/lib/ex/log4j-core-2.11.0.jar", 
				"core/logger/lib/ex/logback-classic-1.2.3.jar",
				"core/logger/lib/ex/logback-core-1.2.3.jar", 
				"core/logger/lib/ex/slf4j-api-1.7.25.jar"
		};
 
		createCoddaAllEclipeProjectXMLFile(eclipseProjectName, eclipsePathList);
 
		createCoddaAllEclipeClasspathXMLFile(eclipseProjectName, eclipsePathList, eclipseLibiaryRelativePathStringList);
	}
 
	public void createCoddaCoreHelperEclipeWorkbenchFiles() throws BuildSystemException {
		String eclipseProjectName = "codda_helper";
 
		EclipsePath[] eclipsePathList = { new EclipsePath("main_src", "core/helper/src/main/java"),
				new EclipsePath("test_src", "core/helper/src/test/java")};
 
		String[] eclipseLibiaryRelativePathStringList = { 
				"core/helper/lib/main/in/jgoodies-common.jar",
				"core/helper/lib/main/in/jgoodies-forms.jar",
				"core/common/lib/test/byte-buddy-1.7.9.jar",
				"core/common/lib/test/byte-buddy-agent-1.7.9.jar",
				"core/common/lib/test/commons-exec-1.3.jar",
				"core/common/lib/test/mockito-core-2.13.4.jar",
				"core/common/lib/test/objenesis-2.6.jar",
				"core/common/dist/codda-core-common.jar",
				"core/logger/lib/ex/jcl-over-slf4j-1.7.25.jar",
				"core/logger/lib/ex/logback-classic-1.2.3.jar",
				"core/logger/lib/ex/logback-core-1.2.3.jar",
				"core/logger/lib/ex/slf4j-api-1.7.25.jar",
				"core/helper/lib/main/in/commons-cli-1.4.jar",
				"core/helper/lib/test/codda-core-junitlib.jar",
				"core/helper/lib/main/in/commons-io-2.6.jar"
		};
 
		createCoddaAllEclipeProjectXMLFile(eclipseProjectName, eclipsePathList);
 
		createCoddaAllEclipeClasspathXMLFile(eclipseProjectName, eclipsePathList, eclipseLibiaryRelativePathStringList);
	}
 
	public void createCoddaSampleBaseServerEclipeWorkbenchFiles() throws BuildSystemException {
		String eclipseProjectName = "codda_sample_base_server";
 
		EclipsePath[] eclipsePathList = { new EclipsePath("main_src", "project/sample_base/server_build/src/main/java"),
				new EclipsePath("test_src", "project/sample_base/server_build/src/test/java")};
 
		String[] eclipseLibiaryRelativePathStringList = { 
				"project/sample_base/server_build/corelib/ex/commons-dbcp2-2.0.1.jar",
				"project/sample_base/server_build/corelib/ex/commons-pool2-2.5.0.jar",
				"project/sample_base/server_build/corelib/ex/jcl-over-slf4j-1.7.25.jar",
				"project/sample_base/server_build/corelib/ex/logback-classic-1.2.3.jar",
				"project/sample_base/server_build/corelib/ex/logback-core-1.2.3.jar",
				"project/sample_base/server_build/corelib/ex/slf4j-api-1.7.25.jar",
				"project/sample_base/server_build/lib/main/ex/jooq-3.10.6.jar",
				"project/sample_base/server_build/lib/main/ex/jooq-codegen-3.10.6.jar",
				"project/sample_base/server_build/lib/main/ex/jooq-meta-3.10.6.jar",
				"core/common/lib/test/byte-buddy-1.7.9.jar", 
				"core/common/lib/test/byte-buddy-agent-1.7.9.jar",
				"core/common/lib/test/commons-exec-1.3.jar",
				"core/common/lib/test/mockito-core-2.13.4.jar", 
				"core/common/lib/test/objenesis-2.6.jar",
				"util/jooq/mysql-connector-java-5.1.46.jar",
				"project/sample_base/server_build/corelib/in/codda-core-all.jar",
				"core/common/dist/codda-core-junitlib.jar",
				"project/sample_base/server_build/corelib/ex/gson-2.8.5.jar",
				"project/sample_base/server_build/lib/main/ex/oracle-mail-1.4.7.jar",
		};
 
		createCoddaAllEclipeProjectXMLFile(eclipseProjectName, eclipsePathList);
 
		createCoddaAllEclipeClasspathXMLFile(eclipseProjectName, eclipsePathList, eclipseLibiaryRelativePathStringList);
	}
 
	public void createCoddaSampleBaseAppClientEclipeWorkbenchFiles() throws BuildSystemException {
		String eclipseProjectName = "codda_sample_base_appclient";
 
		EclipsePath[] eclipsePathList = { new EclipsePath("main_src", "project/sample_base/client_build/app_build/src/main/java"),
				new EclipsePath("test_src", "project/sample_base/client_build/app_build/src/test/java")};
 
		String[] eclipseLibiaryRelativePathStringList = { 
				"project/sample_base/client_build/app_build/corelib/ex/gson-2.8.5.jar",
				"project/sample_base/client_build/app_build/corelib/ex/jcl-over-slf4j-1.7.25.jar",
				"project/sample_base/client_build/app_build/corelib/ex/logback-classic-1.2.3.jar",
				"project/sample_base/client_build/app_build/corelib/ex/logback-core-1.2.3.jar",
				"project/sample_base/client_build/app_build/corelib/ex/slf4j-api-1.7.25.jar",
				"project/sample_base/client_build/app_build/corelib/in/codda-core-all.jar",
		};
 
		createCoddaAllEclipeProjectXMLFile(eclipseProjectName, eclipsePathList);
 
		createCoddaAllEclipeClasspathXMLFile(eclipseProjectName, eclipsePathList, eclipseLibiaryRelativePathStringList);
	}
 
	public void createCoddaSampleBaseWebClientEclipeWorkbenchFiles() throws BuildSystemException {
		String eclipseProjectName = "codda_sample_base_webclient";
 
		EclipsePath[] eclipsePathList = { new EclipsePath("main_src", "project/sample_base/client_build/web_build/src/main/java"),
				new EclipsePath("test_src", "project/sample_base/client_build/web_build/src/test/java")};
 
		String[] eclipseLibiaryRelativePathStringList = {
				"project/sample_base/client_build/web_build/corelib/ex/gson-2.8.5.jar",
				"core/common/dist/codda-core-junitlib.jar",
				"core/common/lib/test/byte-buddy-1.7.9.jar",
				"core/common/lib/test/byte-buddy-agent-1.7.9.jar",
				"core/common/lib/test/commons-exec-1.3.jar", 
				"core/common/lib/test/mockito-core-2.13.4.jar",
				"core/common/lib/test/objenesis-2.6.jar",				
				"project/sample_base/client_build/web_build/corelib/ex/codda-core-all.jar",				
				"project/sample_base/client_build/web_build/lib/main/ex/commons-fileupload-1.3.2.jar",
				"project/sample_base/client_build/web_build/lib/main/ex/commons-lang3-3.7.jar",
				"project/sample_base/client_build/web_build/lib/main/ex/commons-text-1.3.jar",				
				"project/sample_base/client_build/web_build/lib/main/ex/commons-io-2.6.jar",
				"project/sample_base/client_build/web_build/lib/main/ex/simplecaptcha-1.2.1.jar",
				"project/sample_base/client_build/web_build/lib/test/httpcore-4.4.10.jar",
				"project/sample_base/client_build/web_build/lib/test/httpmime-4.5.6.jar",				
		};
 
		createCoddaAllEclipeProjectXMLFile(eclipseProjectName, eclipsePathList);
 
		createCoddaAllEclipeClasspathXMLFile(eclipseProjectName, eclipsePathList, eclipseLibiaryRelativePathStringList);
	}
}