이전에 정리하였던 Leshan LWM2M을 아직 프로젝트에서 사용하고 있다.
Leshan LWM2M은 Maven을 이용하여 프로젝트를 관리한다.
Maven project는 pom.xml에서 Library dependency를 설정하고, 배포방식을 설정할 수 있다.
Leshn LWM2M에서는 jar파일이 3개가 만들어지는데, 하나는 현 패키지 파일만 나오는 방식, 다른 하나는 with-dependency로 만드는 방식이다.
그러니까 with-dependencies는 jar파일안에 모든 의존성 라이브러리가 들어가 있는 것이다.
일반 서버나 PC에 배포해서 구동한다면 이런 방식은 효율적이고 배포도 간편하다.
굳이 라이브러리를 따로 배포할 필요가 없으니 말이다.
문제는 나는 임베디드 개발자라는 것이다.
오히려 이런 편의성이 큰 독으로 왔다.
Library가 전부 들어가있으니 파일 크기가 엄청 커진다.
구동 자체에는 큰 문제가 없다.
보드 메모리가 생각보다 커서 어느정도 크기로도 문제가 없다.
문제는 원격 업그레이드, 즉 OTA이다.
파일 크기가 너무 커서 무선 네트워크로 전송하는 데에 너무 많은 시간이 걸렸다.
그래서 의존성포함 jar를 사용하지 않고 일반 jar를 사용하려고 하니 오류가 난다.
no main manifest attribute.
찾아보니 메인 클래스를 참조하지 못하는 오류였다.
원래는 pom.xml에 plugin으로 mainClass를 선언해주었기에 나타나지 않는 오류인데 이 jar는 플러그인이 적용되지 않기 때문에 문제가 발생하였다.
그래서 직접 jar 파일을 열고, 안에 있는 MANNIFEST.MF 를 수정하였다.
그렇게 수정하였더니 이번엔 다른 오류가 발생한다.
NoClassDefFoundError
아마도 라이브러리를 참조하지 못하여 발생하는 문제일것이다.
jar를 만든 곳은 윈도우고, 구동환경은 linux라서 발생하는 줄 알았다.
그래서 linux의 LD_LIBRARY_PATH도 고쳐보고, LD_PRELOAD도 고쳐보고 별 짓을 다했다.
나중에 알아낸 것은 Class Path가 설정되지 않아서 그렇다는 것이다.
-cp 로 넣는 방법은 잘 안되었다.
그래서 다시 MANIFEST.MF에 Path 를 넣기로 하였다.
그런데 Class-Path를 넣었는데, unknown Error 가 발생한다.
unknown Error는 뭘까.. 검색해도 나오지 않았다.
그래서 라이브러리에 오류가 있는 줄 알고 하나씩 넣어가면서 테스트 해보았다.
한 10개쯤 넘어가니 unknown Error가 발생한다.
아. 마지막에 넣은 이 라이브러리가 깨졌나보다.
그래서 그 라이브러리는 일단 Path에서 뺴고 다른걸 넣어보았다.
그런데 또 unknown Error가 발생하였다.
?????
그래서 열심히 검색하였다.
Class path 사용법을.
그러다가 해외 한 블로그에서 하나를 발견하였다.
Line length:
No line may be longer than 72 bytes (not characters), in its UTF8-encoded form. If a value would make the initial line longer than this, it should be continued on extra lines (each starting with a single SPACE).
그렇다. Class-Path가 너무 길었던 것이다.
그래서 Class-Path를 넣을때, 전부 줄바꿈을 넣고, 경로 앞에 스페이스를 넣었다.
그러니 정상작동하드라...
다음 고민은 이 MANIFEST를 자동으로 만들어주는 pom.xml 작성이다.
매번 build 할때마다 이걸 넣는건 너무 귀찮기때문에...
'정리글' 카테고리의 다른 글
JAVA Maven 라이브러리 분리 (without dependency) (0) | 2020.10.16 |
---|---|
JAVA Maven 프로젝트에서 JNA 사용 (0) | 2020.09.16 |
IIO - Linux Industrial I/O subsystem (0) | 2020.09.02 |
LWM2M 했던 것들 정리 (0) | 2020.07.14 |
TCP tunneling 을 빙자한 Raw Socket (0) | 2020.06.11 |