개인적인 trobleshooting 경험. 정리는 안되어있음 의식의 흐름대로.

누구에게는 바보 같을 수도, 누구에게는 한 줄기 빛이 될수도.

 

멀티모듈 설정시 build-logic / convention / build.gradle.kts 에서 오류 발생

gradle catalog 적용 테스트겸.

 

FAILURE: Build failed with an exception.

* What went wrong:
Cannot convert the provided notation to an object of type Dependency: com.android.application:8.6.0.
The following types/formats are supported:
  - String or CharSequence values, for example 'org.gradle:gradle-core:1.0'.
  - Maps, for example [group: 'org.gradle', name: 'gradle-core', version: '1.0'].
  - FileCollections, for example files('some.jar', 'someOther.jar').
  - Projects, for example project(':some:project:path').
  - ClassPathNotation, for example gradleApi().

Comprehensive documentation on dependency notations is available in DSL reference for DependencyHandler type.

UnsupportedNotationException? ExternalSystemException?

 

* Exception is:
com.intellij.openapi.externalSystem.model.ExternalSystemException: Cannot convert the provided notation to an object of type Dependency: com.android.application:8.6.0.
The following types/formats are supported:
  - String or CharSequence values, for example 'org.gradle:gradle-core:1.0'.
  - Maps, for example [group: 'org.gradle', name: 'gradle-core', version: '1.0'].
  - FileCollections, for example files('some.jar', 'someOther.jar').
  - Projects, for example project(':some:project:path').
  - ClassPathNotation, for example gradleApi().

 

org.gradle.internal.typeconversion.UnsupportedNotationException: Cannot convert the provided notation to an object of type Dependency: com.android.application:8.6.0.
The following types/formats are supported:
  - String or CharSequence values, for example 'org.gradle:gradle-core:1.0'.
  - Maps, for example [group: 'org.gradle', name: 'gradle-core', version: '1.0'].
  - FileCollections, for example files('some.jar', 'someOther.jar').
  - Projects, for example project(':some:project:path').
  - ClassPathNotation, for example gradleApi().

 

 

1. kotlin-dsl 인데 뭔소리냐?

2. toml  파일에서 오타가 났나? -> No

3. 구글검색 -> 진짜 듣도보도 못한 exception.. 정보도 거의없음

4. 검색어가 잘못됐나? -> kotlin-dsl 관련으로 검색 -> 오 1개 찾음

 

1. Find gradlew in your project root folder.
2. Right click on it, then open in -> terminal.
3. Write ./gradlew tasks command and enter.
4. If showing any error in your build.gradle file then fix it and rerun ./gradlew tasks command until all errors are solved and you can see BUILD SUCCESSFUL.
Now sync your gradle file.

한번해보자.

 

앱모듈에서 에러

* What went wrong:
An exception occurred applying plugin request [id: 'com.android.application', version: '8.6.0']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
      Your current JDK is located in C:\Program Files\Amazon Corretto\jdk11.0.21_9
      You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

 

Android Studio / Setting / build / gradle 설정은 jdk 17사용인데? ->

일단 JAVA_HOME 을 바꿔줌(AGP 8.6.0이므로 이때까지는..) ->

앱모듈 오류는 사라짐 -> 다시 gradle sync -> OP 해결안됨;;;

 

중간에 시도해 본것

1. dependencies{} 블럭에 라이브러리 maven에서 찾아서 수정. 플러그인으로 넣고 있었음;;

2. AGP 8.5.1로 수정 -> Android Studio Koalla 는 여기까지 지원. 이후 버전은 Koala Feature Drop 이 필요.

3. gradle 업데이트 8.10 -> 효과없었음

멘붕 오기 시작ㅋㅋ;;

 

그런데 build-logic 에서 추가한 파일들이 이상함.

1. depency를 추가했음에도 unresolved reference, 자동 import도 안뜸?

2. module not specified 에러 -> root레벨 setting.gradle 에서 include(":app") 제거

  이거 하니까 자동 import가 동작함? -> unresolved reference 해결

plugin을 dependencies에 넣고 있어서 바꿔줌. 

dependencies {
    compileOnly(libs.android.gradlePlugin)
    compileOnly(libs.android.tools.common)
    compileOnly(libs.kotlin.gradlePlugin)
    compileOnly(libs.ksp.gradlePlugin)
}

 

3. root레벨 setting.gradle 에서 include(":app") 추가

4. InvalidPluginException 발생? 오~ 뭔가 됐어?

-> 이 키워드로 검색

 

결론.

밑의 구조로 되어 있어야 한다.

나의 경우 build-logic / convention / src / main 수준에 plugin파일들이 존재 하고 있었음.

파일 수준을 build-logic / convention / src / main / kolin 으로 옮겨주니 IDE가 다~ 알아서 잡아줌. 빌드 성공.

뻘짓 8시간.

├── app
│  └── build.gradle
├── build-logic
│   ├── convention
│   │   ├── build.gradle
│   │   └── src
│   │       └── main
│   │           └── kotlin
│   │               └── com.xx
│   │                   └── KotlinAndroid.kt
│   │               └── AndroidConventionPlugin.kt
│   └── settings.gradle
└── settings.gradle

 

근 10년만에 컴퓨터를 맞추게 되었다.

아직은 그래픽 카드를 구매하지 않아 반본체 상태임.

 

As-is

CPU : i5-4570

메인보드 : ASRock B85M Pro4

램 : DDR3 16G 시금치

글카 : inno 3D 1060 3G

파워 : 기억안남

 

 

To-be

CPU : i7-13700K

메인보드 : GIGABITE Z790 AORUS ELITE

램 : DDR5-5600 KLEVV 흑금치 32G(16x2) -> 나중에 64G로 갈예정

그래픽카드 : MSI Geforce RTX 4090 SUPRIM X

                     GIGABYTE Geforce RTX 4090 Gaming OC D6X 24GB

파워 : FSP HYDRO G PRO 1000W 80PLUS Gold Full Modular ATX 3.0

쿨러 : 3RSYS Socoool RC1800 ARGB (BLACK)

케이스 : 리안리 LANCOOL 216

SSD : 삼성전자 PM9A1 M.2 NVMe 병행수입(1TB)

 

스펙선택 기준

우선 나의 컴퓨터 이용 스타일을 보자면 

스팀게임 고사양(토탈워 등) + 크롬창 수십개 켜놓기 + 프로젝트 빌드

램과 멀티성능 고성능 그래픽 카드가 필요하다. 

그러므로 기왕 맞출거 하이엔드로 맞추려고 투자했고

환율 상승과 물가 상승으로 생각보다 예산이 더 들어갔다..

CPU 언더볼팅, 램오버도 진행할 예정이다.

 

 

제품선택기준

CPU : i7-13700K 

일하는 거는 회사에서 맥북프로를 써서 어짜피 넘사벽이지만

집에서도 i9까지는 아니더라도 i7이상 쓰고 싶었음.

 

메인보드 : GIGABITE Z790 AORUS ELITE

제일 중요하다고 생각하는 부품. 정말 고민을 많이 했는데

MSI Z690 토피도 vs GIGABITE Z790 AORUS ELITE 

(인텔랜 I225v 이슈 vs 고주파)

인텔랜이 LG인터넷과 이슈가 많다고 해서 결국 기가바이트 선택.

현재 메인보드 가격들이 미쳐 돌아가지만

상대적으로 기가바이트가 가격 포지션 정말 잘 잡은거 같음. 

비싸지만 가성비가 좋은거 같아서 선택함.

파워는 같이 못찍었다
rev1.1 버전
ssd 방열판

 

: DDR5-5600 KLEVV 흑금치 32G(16x2)

램오버 적당히 하다가 삼성 시금치 고클럭 나오면 변경 예정.

방열판도 구매했다.

 

파워 : FSP HYDRO G PRO 1000W 80PLUS Gold Full Modular ATX 3.0

파워는 무지성으로 비싸고 좋은거 지름.

 

쿨러 : 3RSYS Socoool RC1800 ARGB (BLACK)

쿨러도 고민을 많이 했는데 작업을 24시간 돌리지 않는 이상 수냉이 필요없다는 결론을 냈음.

언더볼팅도 계획이 있기 때문에 수냉쓰면서 누수위험에 스트레스 받느니

걍 공냉 선택.나중에 심각하게 문제가 되면 바꿀예정.

바꾸게 된다면 아틱프리저 시리즈로 할 예정.

 

케이스 : 리안리 LANCOOL 216

적당한듯?

 

SSD : 가성비로 4세대 중 구매시 젤 싼거일단 무지성으로 질렀음.

1. 삼성 980 PRO(2TB)

2. 삼성 PM9A1 M.2 NVMe 병행수입(1TB)

추가 구입 예정. 아마도 슬롯 꽉 채울듯.

 

그래픽카드 : MSI Geforce RTX 4090 SUPRIM X

GIGABYTE Geforce RTX 4090 Gaming OC D6X 24GB

Colorful  Advanced OC vs  GIGABYTE Gaming OC 

사실 어뱅이 더 끌렸음. 중고도 알아봤지만 가격이 만족스럽지 못했음.

그러던 중 약 2개월 주기로 특가가 뜨는 것을 확인하고(3월 6일 구입) 4월까지 기다릴 수 없어서

가성비 제일 좋은 기가바이트 선택( AS+1년, 이벤트 캐시백).

메인보드도 마찬가지고 기가바이트가 가격 포지션 잘 잡은거 같다.

 

특가로 떠서 기가바이트 환불하고 걍 지름.

찌프림 이슈가 있지만 안고 갈 예정(끝판왕이자나?).

 

굳이 비싼 4090을 선택하는 이유?

1. 자기만족 - 최고성능 짱쎈 4090쓰고 싶다.

2. 4k 고사양게임.

3. AI 공부(?)

 

실제 조립 후 시스템 사진은 추가 예정이다.

Check out 11 Github Repositories that will make you a Good Android developer


1- Google l/0 Android App
https://github.com/google/iosched

2- Android - Clean Architecture- Kotlin

https://github.com/android10/Android-CleanArchitecture-Kotlinnkd.in/d5NZzXGN

 

3- Open Source guides for Android Developers

https://github.com/codepath/android_guides/wikinkd.in/dRyYNeep

 

4- Best practices in Android development

https://github.com/futurice/android-best-practices

 

5- collection of samples using the Architecture Components

https://github.com/android/architecture-components-samplesnkd.in/dVWeJE6v

 

6- Collection of excellent Android UI/UX libraries.

https://github.com/wasabeef/awesome-android-ui

 

7- Another Github Cheatsheet repository for tips and tricks on Android
https://github.com/nisrulz/android-tips-tricks

 

8- Android example with Clean Architecture

https://github.com/mitchtabian/Clean-Notes

 

9- Android Architecture Blueprints is a project to showcase different architectural approaches to developing Android apps.
https://github.com/android/architecture-samples

 

10- Trackr App to explore common Ul patterns

https://github.com/android/trackr

  • && 을 이용하여 명령을 순서대로 실핼할 수 있다.
bhyoo@DESKTOP-MQPJ46K:~/zoo$ ls
birds  mammals  reptiles
bhyoo@DESKTOP-MQPJ46K:~/zoo$ cd birds/ && touch eagle.txt && cd ..
bhyoo@DESKTOP-MQPJ46K:~/zoo$ ls birds/
eagle.txt

 

  • ln [src] [dst] : 심볼릭 링크 생성
bhyoo@DESKTOP-MQPJ46K:~/zoo$ ln -s birds/eagle.txt strongestAnimal.txt
bhyoo@DESKTOP-MQPJ46K:~/zoo$ ls -l
total 0
drwxr-xr-x 1 bhyoo bhyoo 512 Jan 10 15:37 birds
drwxr-xr-x 1 bhyoo bhyoo 512 Jan 10 15:40 mammals
drwxr-xr-x 1 bhyoo bhyoo 512 Jan 10 15:39 reptiles
lrwxrwxrwx 1 bhyoo bhyoo  15 Jan 10 15:41 strongestAnimal.txt -> birds/eagle.txt

 

  • find : 파일 검색
bhyoo@DESKTOP-MQPJ46K:~$ find . -name eagle.txt
./zoo/birds/eagle.txt
bhyoo@DESKTOP-MQPJ46K:~$ find . -empty
./.landscape/sysinfo.log
./.motd_shown
./Documents
./Downloads
./Images
./Videos
./zoo/birds/eagle.txt
./zoo/mammals/koala.txt
./zoo/reptiles/trex.txt

 

  • head [filename]: 파일의 첫 10라인을 출력
bhyoo@DESKTOP-MQPJ46K:~$ head workers.csv
1,Area of Expertise,Name,Hourly Rate,Favorite Number,38.94,35,Nunavut,Storage & Organization,Compression Score
44,Avery 49,Aaron Bergman,4132,1.32,2.88,0.5,Nunavut,Labels,0.36
64,Boston Electric Pencil Sharpener Model 1818 Charcoal Black,Adrian Hane,6535,-19.33,28.15,8.99,Nunavut,Pens & Art Supplies,0.57
33,Self-Adhesive Address Labels for Typewriters by Universal,Alan Barnes,2532,140.01,7.31,0.49,Nunavut,Labels,0.38
34,Accessory37,Alan Barnes,2532,-78.96,20.99,2.5,Nunavut,Telephones and Communication,0.81
89,Avery 506,Alan Barnes,2532,75.13,4.13,0.5,Northwest Territories,Labels,0.39
17,"#10-4 1/8"" x 9 1/2"" Premium Diagonal Seam Envelopes",Allen Rosenblatt,998,93.8,15.74,1.39,Nunavut,Envelopes,0.4
67,Crate-A-Files™,Andrew Gjertsen,6916,-141.27,10.9,7.46,Nunavut,Storage & Organization,0.59
56,Avery Arch Ring Binders,Ann Chong,5894,87.68,58.1,1.49,Nunavut,Binders and Binder Accessories,0.38
57,APC 7 Outlet Network SurgeArrest Surge Protector,Ann Chong,5894,-68.22,80.48,4.5,Nunavut,Appliances,0.55

 

  • cat [filename]: 파일내용 전체출력

 

 

  • grep [needle] [filename] : 파일내용 검색 
bhyoo@DESKTOP-MQPJ46K:~$ grep "carlos" workers.csv -i
13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5
14,DS/HD IBM Formatted Diskettes 200/Pack - Staples,Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71
5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5
6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37
22,Avery 52,Carlos Soltero,515,26.92,3.69,0.5,Nunavut,Labels,0.38
23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,515,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8
29,Tenex Personal Project File with Scoop Front Design Black,Carlos Soltero,515,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59

※ 파이프라인( | )을 이용하여 검색도 가능 

bhyoo@DESKTOP-MQPJ46K:~$ cat workers.csv | grep "Carlos"
13,Holmes HEPA Air Purifier,Carlos Daly,868,134.72,21.78,5.94,Nunavut,Appliances,0.5
14,DS/HD IBM Formatted Diskettes 200/Pack - Staples,Carlos Daly,868,114.46,47.98,3.61,Nunavut,Computer Peripherals,0.71
5,Holmes HEPA Air Purifier,Carlos Soltero,515,30.94,21.78,5.94,Nunavut,Appliances,0.5
6,G.E. Longer-Life Indoor Recessed Floodlight Bulbs,Carlos Soltero,515,4.43,6.64,4.95,Nunavut,Office Furnishings,0.37
22,Avery 52,Carlos Soltero,515,26.92,3.69,0.5,Nunavut,Labels,0.38
23,Plymouth Boxed Rubber Bands by Plymouth,Carlos Soltero,515,-5.77,4.71,0.7,Nunavut,Rubber Bands,0.8
29,Tenex Personal Project File with Scoop Front Design Black,Carlos Soltero,515,-5.45,13.48,4.51,Nunavut,Storage & Organization,0.59

 

 

 

  • man : 명령어의 메뉴얼을 볼 수있는 명령어
bhyoo@DESKTOP-MQPJ46K:~$ man man

 

  • pwd : 현재 경로 출력
bhyoo@DESKTOP-MQPJ46K:~$ pwd
/home/bhyoo

 

  • ls : 현재 위치의 파일 표시
bhyoo@DESKTOP-MQPJ46K:~$ ls
Documents  Downloads  Images  Videos

※ -a : 숨김파일 표시

    -l : 상세 리스트포맷

 

  • mkdir : 폴더 생성
bhyoo@DESKTOP-MQPJ46K:~$ mkdir stuff
bhyoo@DESKTOP-MQPJ46K:~$ ls
Documents  Downloads  Images  Videos  stuff

 

  • touch : 파일 생성
bhyoo@DESKTOP-MQPJ46K:~$ cd stuff
bhyoo@DESKTOP-MQPJ46K:~/stuff$ touch the_stuff.txt
bhyoo@DESKTOP-MQPJ46K:~/stuff$ ls
the_stuff.txt

 

  • cp [src] [dst]: 파일 복사
bhyoo@DESKTOP-MQPJ46K:~/stuff$ cp the_stuff.txt other_stuff.txt
bhyoo@DESKTOP-MQPJ46K:~/stuff$ ls
other_stuff.txt  the_stuff.txt

 

  • rm : 파일삭제
bhyoo@DESKTOP-MQPJ46K:~/stuff$ rm other_stuff.txt
bhyoo@DESKTOP-MQPJ46K:~/stuff$ ls
the_stuff.txt

※ -r : 폴더내부의 모든파일을 삭제하고 폴더까지 삭제

bhyoo@DESKTOP-MQPJ46K:~$ rm stuff
rm: cannot remove 'stuff': Is a directory
bhyoo@DESKTOP-MQPJ46K:~$ rm -r stuff
bhyoo@DESKTOP-MQPJ46K:~$ ls
Documents  Downloads  Images  Videos
bhyoo@DESKTOP-MQPJ46K:~$

 

#!/bin/bash
export LANG=ko_KR.UTF-8
echo "Shutdown tomcat now...."
bash /WAS/apache-tomcat-9.0.19/bin/shutdown.sh
echo "tomcat is now terminated..."
sleep 10
if [ -z "`ps -eaf | grep java | grep /WAS/apache-tomcat-9.0.19/bin`" ]; then
        echo "Tomcat was terminated successfully."
else
        ps -eaf | grep java | grep /WAS/apache-tomcat-9.0.19/bin | awk '{print $2}' |
        while read PID
                do
                echo "Killing $PID... "
                kill -9 $PID
                echo "Tomcat is being shutdowned"
                done
fi
 
echo "tomcat restart now"
bash /WAS/apache-tomcat-9.0.19/bin/startup.sh
if [ -z "`ps -eaf | grep java | grep /WAS/apache-tomcat-9.0.19/bin`" ]; then
        echo "Error!!! Cannot start tomcat server."
else
        echo "Tomcat restart succcessfully. "
fi
echo "Job finished"

 

 

 

Java에서 array를 List로 바꾸려면 어떻게 해야될까?

for문을 쓰는것이 당연하지만 왠지 복잡해 보이고..

Arrays.asList가 List를 리턴한다. 간단해 보이므로 이걸쓰자.

 

하지만 잘 살펴보지 않으면 여기에 함정이 있다.

다음 코드를 살펴보자.

 

Integer[] arr = new Integer[]{1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
list.add(6);
Exception in thread "main" java.lang.UnsupportedOperationException
	at java.base/java.util.AbstractList.add(AbstractList.java:153)
	at java.base/java.util.AbstractList.add(AbstractList.java:111)
	at ArrayAsList.main(ArrayAsList.java:10)

흠..List인데 add가 안된다?

 

Arrays.asList 구현을 보자.

public static <T> List<T> asList(T... a) {
	return new ArrayList<>(a);
}

ArrayList리턴인데 머지..?

 

하지만 이건 java.util.ArrayList 가 아니다.(머여그럼)

바로 밑에 코드를 보면 Arrays 안에 private static 으로 구현되어있다. 생성자로 array를 받고 전역변수로 array로 관리한다.

 

private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
    {
        private static final long serialVersionUID = -2764017481108945198L;
        private final E[] a;

        ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
        ...
 }

 

그리고 add 메소드가 구현이 안되어있다. AbstractList 로 따라가다 보면 다음과 같이 UnsupportedOperationException을 발생시키는걸 볼 수 있다.

public void add(int index, E element) {
	throw new UnsupportedOperationException();
}

Arrays.asList 에서 나오는 결과로는 동적 List를 만들 수 없다. 

 

동적 List로 만들고 싶다면 오브젝트를 생성하여 반복문으로 새로 값을 할당해야 한다.

'Java' 카테고리의 다른 글

[Java] Wrapper 클래스 Cache  (0) 2020.06.18
[Java] Java에서 Map 관련 Iterate(반복문) 방법  (0) 2016.11.10

+ Recent posts