Gradle Wrapper in IDEA

Tool/Gradle 2021. 10. 18. 22:14

Gradle 프로젝트 소스를 실행할 때, 로컬 컴퓨터에 프로젝트와 동일한 버전의 gradle 이 필요할 수 있는데 Wrapper 를 사용하면 해당 버전을 수동 설치할 필요가 없다. Gradle Wrapper 를 사용하면 지정된 버전의 gradle 이 없을 경우 자동으로 다운로드 및 설치를 하여, 해당 프로젝트를 동일한 gradle 버전으로 빌드할 수 있다. 구성원들의 안정적이고 표준화된 실행을 보장하기 위해 항상 Wrapper 로 빌드를 실행하는 것을 권장한다.

 

 

1. Wrapper 파일 생성

 

누군가 해당 소스를 받아서 Wrapper 를 사용할 수 있게 하려면, 미리 wrapper 파일을 생성해야 한다. 이 때는 gradle 이 로컬 컴퓨터에 설치되어 있어야 한다. 기본적으로 Gradle 프로젝트를 생성하는 init task 로 wrapper task 까지 실행된다. wrapper task 는 "Build Setup" 그룹에 존재하며, 이를 실행할 경우 프로젝트 디렉토리에 wrapper 파일을 생성해 준다.

 

$ gradle wrapper

gradle/wrapper/gradle-wrapper.jar
gradle/wrapper/gradle-wrapper.properties
gradlew(.bat)

 

  • jar 파일은 properties 파일에 기반하여 Gradle 배포판을 다운로드하는 코드가 포함된다.
  • gradlew 파일은 Wrapper 로 빌드를 실행하기 위한 스크립트이다.
  • properties 파일에는 gradle 버전과 배포판 타입을 선택할 수 있으며 기본적으로 사용중인 gradle 버전을 따른다.

 

명령줄에서 직접 버전과 배포판 타입을 지정하여 wrapper 파일을 생성할 수도 있고,

 

$ gradle wrapper --gradle-version 7.2 --distribution-type all

 

이미 민들어진 properties 파일을 수정하여 동일한 결과를 만들 수도 있다.

 

distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip

 

 

2. Wrapper 사용

 

$ gradlew build

 


 

※ IDEA 에서의 Gradle 설정

 

Wrapper 를 활용하는 가장 일반적인 방법은 프로젝트 생성하는 사람이 Wrapper 설정까지 마쳐놓고, 다른 개발자들이 IDEA 설정에서 wrapper 파일을 사용하도록 설정하는 것이다. 

 

 

간혹 수동으로 설치한 gradle 과 프로젝트 설정의 gradle 버전에 혼동을 느낄 수 있다. 로컬에서 프로젝트 gradle 버전 설정은 [File] - [Settings...] - [Build, Execution, Deployment] - [Build Tools] - [Gradle] 에서 설정한다. 그렇게 설정한 버전은 [View] - [Tool Windows] - [gradle] 창에서 사용된다.

 

 

하지만 [View] - [Tool Windows] - [Terminal] 에서의 gradle 은 수동 설치 후 로컬 컴퓨터의 환경 변수에 지정된 gradle 버전과 연결되어 있다. Terminal 에서 프로젝트 디렉토리 안에 있더라도 [Settings...] 에서 설정한 프로젝트의 gradle 버전과 연관이 없다. IDEA Terminal 이지만 CMD 와 같다.  [File] - [Settings...] - [Tools] - [Terminal] 에서 사용할 터미널 종류를 선택할 수 있다.

 

 


 

You can configure gradle wrapper to use distribution with sources. It will provide IDE with Gradle API/DSL documentation.

 

IDEA 에서 gradle-wrapper 사용시 배포판 타입이 바이너리 전용 파일을 사용하도록 설정되어 있는 경우 발생하는 알림이다. 수락하면 docs/source 를 포함한 all 버전의 gradle 로 설치되고 사용된다. (무시해도 상관없음)

 

 

Gradle 설치 파일의 배포판 타입(DistributionType).

 

  1. gradle-version-bin.zip (bin: 바이너리만)
  2. gradle-version-all.zip (all: docs, source 포함)

 

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

 

Windows Defender might be impacting your build and IDE performance. IntelliJ IDEA checked the following directories:

 

IntelliJ 실행시 간혹 보이는 알림이다. 바이러스 백신 프로그램에서 실시간 검색이 활성화되어 있는 경우, IDE 빌드시 새로 생성되는 파일들과 관련하여 여러 간섭을 하게 될 수 있고 그로 인해 빌드 성능에 영향을 미칠 수 있으니, 해당 IDE 프로세스(idea64.exe, fsnotifier64.exe, ...) 를 바이러스 실시간 검색에서 제외시키거나, IDE 관련 디렉토리들을 제외시키는 것을 권장하고 있다.

 

위 알림처럼 Windows Defender 알림이 발생했을 때, 자동 fix 시킨다면, 윈도우즈의 [바이러스 위협 방지] 에서 해당 디렉토리들을 자동으로 제외시킨다.

 

  • 프로젝트 작업 디렉토리
  • Gradle 캐시 디렉토리( %USERPROFILE%\.gradle)
  • IntelliJ IDEA 에서 설정 및 캐시 를 저장하는 데 사용하는 디렉토리
    - Configuration (idea.config.path): %APPDATA%\JetBrains\IntelliJIdea2020.3
    - System (idea.system.path): %LOCALAPPDATA%\JetBrains\IntelliJIdea2020.3

 

어떤 경우 위처럼 제외 설정을 마쳤는데도 계속해서 알림이 뜬다면, don't show me again 을 선택했는데도 계속해서 알림이 뜬다면 (idea.config.path)/options/other.xml 파일을 편집하여 해당  알림을 무시할 수도 있다.

 

<component name="PropertiesComponent"> 
    ...
    <property name="ignore.virus.scanning.warn.message" value="true" />
    ...
</component>

 


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret
import pandas as pd
print(pd.__version__)
cs


Traceback (most recent call last):

  File "~\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 3343, in run_code

    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-2-22947d009327>", line 1, in <module>

    runfile('D:/Project_CTLab/Hong_Test2/pandas.py', wdir='D:/Project_CTLab/Hong_Test2')

  File "C:\Program Files\JetBrains\PyCharm 2020.2.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_umd.py", line 197, in runfile

    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script

  File "C:\Program Files\JetBrains\PyCharm 2020.2.3\plugins\python\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile

    exec(compile(contents+"\n", file, 'exec'), glob, loc)

  File "D:/Project_CTLab/Hong_Test2/pandas.py", line 1, in <module>

    import pandas as pd

  File "C:\Program Files\JetBrains\PyCharm 2020.2.3\plugins\python\helpers\pydev\_pydev_bundle\pydev_import_hook.py", line 21, in do_import

    module = self._system_import(name, *args, **kwargs)

  File "D:\Project_CTLab\Hong_Test2\pandas.py", line 3, in <module>

    print(pd.__version__)

AttributeError: partially initialized module 'pandas' has no attribute '__version__' (most likely due to a circular import)


pandas 모듈 불러오면서 파일명을 pandas.py 로 저장했더니...ㅋㅋ







WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret

PyCharm + Anaconda + Tensorflow 에 처음 손대면서 생긴일.

  • PyCharm 은 사이트에서 받아서 설치하고,
  • Anaconda 도 사이트에서 받아 설치하고,
  • Tensorflow 는 pip 로 설치하고...


하지만 PyCharm 에서 별 설정없이  import tensorflow  를 날렸다가는,


ImportError: DLL load failed while importing _pywrap_tensorflow_internal: 지정된 모듈을 찾을 수 없습니다.

...or...

ModuleNotFoundError: No module named 'tensorflow'


식의 에러메시지를 만나게 된다.


설치가 되어 있음에도 모듈을 찾을 수 없다는 것은 해당 IDE 에서 tensorflow 를 사용할 수 있도록 설정 등이 제대로 되어 있지 않음을 뜻하는거 같은데...


만약 Anaconda 설치 전에 python 을 별도로 설치했거나, PyCharm 설치 후에 새 프로젝트 생성하면서 default 로 대충 넘기다 보면 나도 모르게 가상환경으로 인터프리터가 생성 되던지.. 해서 일단 인터프리터는 두 이상이 되어 있을 수 있다. 그리고 현재 인터프리터에서 tensorflow 를 사용할 수 있도록 준비가 되어 있는지를 확인해야 한다.


난 현재 인터프리터에서 pip 로 tensorflow 설치 및 확인하였고, PyCharm 탐색기의 External Libraries, ~/anaconda3/Lib/site-packages 에서도 확인했는데 tensorflow 패키지는 확실히 있다. PyCharm 문법에서도 오류 없이 타이핑된다. 하지만 해당 파일을 실행시키면 ImportError...


더 알 수 없는 것은 PC 두 대에 동일하게 설치했는데 한 대는 이상이 없고 한 대만 ImportError 가 발생한다. 같은 2.3.1 버전인데... 인터넷 검색 결과 ImportError 에 관련된 비슷비슷한 에러가 상당히 많다. 그나마 가능성이 있을 것 같은 두 가지 원인을 찾아냈다.



두 PC 모두 하드웨어 사양은 동일했는데, 에러없이 정상적으로 구동된 PC 는 위 드라이버가 모두 설치되어 있었다. (내 손으로 깔은 기억은 없음...)


  • Microsoft Visual C++ 2017 Redistributable(x64)
  • NVIDIA CUDA Visual Studio Integration 10.0
  • NVIDIA Nsight Visual Studio Edition 6.0


에러난 PC에 하나하나 깔아보려고 했는데  vc_redist 2015-2019  를 설치하자마자 ImportError 문제가 해결이 됐다...; 참고로 Visual C++ 재배포 가능 패키지란, Visual C++ 이 설치되어 있지 않은 컴퓨터에 Visual C++ 라이브러리의 런타임 구성 요소를 설치하여 Visual C++ 로 개발된 응용 프로그램을 실행하게 해주는 패키지이다.


일단 되서 다행인데 vc_redist 2015 가 이미 깔려 있었는데 안됐던것도 억울하고,

에러도 _pywrap_tensorflow_internal 라고 나와 있으면 내가 어찌 아냐? 그것도 억울하고,

그렇게 중요한 파일이면 vc_redist 파일을 필수로 설치하게 하던지... 무식이 가장 억울하다... 






WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret



Master


위 그림은 쿠버네티스 클러스터의 아키텍처이다. 좌측의 마스터 컴포넌트는 클러스터의 제어영역(control plane) 을 제공하여, 클러스터에 관한 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 반응한다. 마스터 컴포넌트는 클러스터 내에 어떤 노드에서든 동작할 수 있지만, 일반적으로 클러스터와 동일한 노드 상에서 구동시킨다. 아래는 마스터 내에서 동작하는 바이너리 컴포넌트들이며 쿠버네티스 초기화시 자동 설치된다.


kube-apiserver

쿠버네티스 API 로, 외부/내부에서 관리자의 원격 명령을 받을 수 있는 컴포넌트이다.


etcd

모든 클러스터 데이터를 저장하는 고가용성 키-값 저장소로, etcd 데이터에 대한 백업 계획은 필수이다.


kube-scheduler

생성된 파드를 노드에 할당해 주는 컴포넌트이다. 이것을 스케줄링이라 하며, 리소스/하드웨어/소프트웨어/정책/워크로드 등을 모두 참고하여 가장 최적화된 노드에 파드를 배치하게 될 것이다.


kube-controller-manager

아래의 컨트롤러들을 구동하는 컴포넌트이다.

- Node Controller : 노드가 다운되었을 때 알림와 대응에 관한 역할을 한다.

- Replication Controller : 지정된 수의 파드들을 유지시켜 주는 역할을 한다.

- Endpoints Controller: 서비스와 파드를 연결시켜 엔드포인트 오브젝트를 만든다.

- Service Account & Token Controllers: 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성한다.



Node


우측 하단의 노드 컴포넌트(Minions) 는 마스터 컴포넌트에 의해 관리되며 VM 이나 물리 장치가 될 수 있다. 동작중인 파드를 유지시키고 쿠버네티스 런타임 환경을 제공한다. 아래는 노드 내에서 동작하는 바이너리 컴포넌트들이며 노드 오브젝트 생성시 자동 설치된다.


kubelet

클러스터의 각 노드에서 실행되는 에이전트로, 컨테이너들이 파드에서 실행 중인지, 이상이 없는지 확인한다.


kube-proxy

호스트 상의 네트워크 규칙으로 커넥션 포워딩을 수행함으로서 쿠버네티스 Service 가 가능하도록 한다.


Container Runtime

컨테이너 런타임은 컨테이너의 동작을 책임지며, 쿠버네티스에서 지원하는 컨테이너 런타임은 다음과 같다. 

Docker, containerd, cri-o, rktlet, Kubernetes CRI (Container Runtime Interface) 구현체.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

트랙백  0 , 댓글  0개가 달렸습니다.
secret