찾다
Javajava지도 시간PVS-Studio 4의 새로운 진단 규칙

PVS-Studio 7.34 릴리스에서는 Java용 오염 분석, C#용 Unity 관련 진단 규칙, OWASP 심층 분석 등 다양한 새로운 진단 규칙이 분석기에 도입되었습니다. 이 기사에서는 모든 내용을 다룰 것입니다.

New diagnostic rules in PVS-Studio 4

기음

이번 릴리스에서 C 팀은 일반 분석 진단 규칙과 다양한 소프트웨어 개발 표준 지원에 중점을 두었습니다.

하지만 모자를 꽉 쥐세요. 이것은 시작에 불과합니다! 팀은 더 많은 MISRA 표준 진단 규칙을 다룰 계획이므로 더 많은 소식을 기대해주세요 :)

지금은 7.34 릴리스의 주요 규칙을 살펴보겠습니다.

V1116

설명 메시지 없이 예외 개체를 생성하면 로깅이 충분하지 않을 수 있습니다.

이 진단 규칙은 설명 메시지 없이 생성된 예외를 감지하도록 설계되었습니다.

메시지가 없으면 오류 감지 및 수정 과정은 물론 전반적인 코드 가독성이 저하될 수 있습니다.

다음은 PVS-Studio 분석기가 경고를 생성하도록 만드는 코드의 예입니다.

void SomeCheck(const char *val)
{
  if (!val) throw std::runtime_error { "" };
  ....
}

void Foo()
{
  const char *val = ....;
  try
  {
    SomeCheck(val);              // 



<p>오류가 발생하면 SomeCheck 함수는 빈 메시지와 함께 예외를 발생시키며 이는 Foo 함수에서 처리됩니다. 처리 중에 std::cerr에는 예외 이유에 대한 정보가 포함될 것으로 예상되지만 그렇지 않습니다.</p>

<p>이렇게 코드를 작성함으로써 개발자는 동료들에게 "행복한 디버깅"을 기원하는 마음을 전합니다. 이는 실패의 정확한 원인을 이해하는 데 방해가 됩니다.  </p>

<p>이 규칙은 표준 예외에 적용됩니다. 사용자 정의 주석 메커니즘을 사용하여 사용자 정의 예외에 대한 경고를 발행할 수 있습니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V1117 [C 언어의 경우]
</h3>

<h4>
  
  
  선언된 함수 유형은 cv-qualified입니다. 이 유형을 사용할 때의 동작은 정의되지 않습니다.
</h4>

<p>이 진단 규칙은 C 언어에만 적용됩니다.</p>

<p>const 또는 휘발성 한정자를 사용하는 함수 유형 정의의 경우를 감지하는 것을 목표로 합니다.  </p>

<p>C23 표준(문단 6.7.4.1의 10번째 항목)에 따르면 이러한 유형을 사용하면 정의되지 않은 동작이 발생합니다.</p>

<p>PVS-Studio 분석기가 경고를 생성하는 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">typedef int fun_t(void);

typedef const fun_t const_qual_fun_t;          // 



<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V2022 [C 언어의 경우]
</h3>

<h4>
  
  
  정수 유형에서 열거형 유형으로의 암시적 유형 변환입니다.
</h4>

<p>리팩토링 및 디버깅 시 도움이 될 수 있는 C 언어에 대한 또 다른 진단 규칙입니다.</p>

<p>이 규칙을 사용하면 분석기가 정수 유형의 열거형 유형에 대한 암시적 캐스트를 감지할 수 있습니다. </p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p><pre class="brush:php;toolbar:false">void SomeCheck(const char *val)
{
  if (!val) throw std::runtime_error { "" };
  ....
}

void Foo()
{
  const char *val = ....;
  try
  {
    SomeCheck(val);              // 



<p>이 코드는 조건 연산자(?:)를 사용하여 두 정수 변수 posOne과 posTwo 중에서 선택하여 암시적 캐스트를 생성합니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V5014 [OWASP 표준]
</h3>

<h4>
  
  
  OWASP. 암호화 기능은 더 이상 사용되지 않습니다. 이를 사용하면 보안 문제가 발생할 수 있습니다. 동등한 최신 기능으로 전환하는 것을 고려하십시오.
</h4>

<p>다음은 SAST 원칙에 부합하는 보안에 초점을 맞춘 새로운 진단 규칙입니다.</p>

<p>이 규칙은 OWASP 보안 검증 표준에 따라 설계되었습니다.</p>

<p>오래된 암호화 기능 호출을 감지하는 것이 목표입니다. 이를 사용하면 심각한 소프트웨어 보안 문제가 발생할 수 있습니다.</p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">typedef int fun_t(void);

typedef const fun_t const_qual_fun_t;          // 



<p>Microsoft 설명서에 따르면 CryptoImportKey 및 CryptoDestroyKey 기능은 더 이상 사용되지 않습니다. 이는 Cryptography Next Generation의 보안 대응 항목(BCryptoImportKey 및 BCryptoDestroyKey)으로 대체되어야 합니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<p>하지만 그건 단지 워밍업일 뿐이에요! C 및 C 팀은 다양한 소프트웨어 개발 표준에 대한 더 많은 진단 규칙을 다룰 계획입니다. MISRA 표준에 특별한 주의를 기울일 것입니다. 그럼 소식을 기다려주세요 :)</p>

<h2>
  
  
  기음
</h2>

<p>새 PVS-Studio 7.34 릴리스에서 C# 팀은 Unity 관련 진단 규칙을 만드는 데 중점을 두었지만 일반 분석 규칙도 잊지 않았습니다. </p>

<p>후자부터 시작해 보겠습니다.</p>

<h3>
  
  
  V3207
</h3>

<h4>
  
  
  'A 또는 B가 아님' 논리 패턴이 예상대로 작동하지 않을 수 있습니다. 'not' 패턴은 'or' 패턴의 첫 번째 표현식에만 일치합니다.
</h4>

<p>이 새로운 진단 규칙은 A 또는 B가 아닌 패턴의 잘못된 사용을 감지하는 것을 목표로 합니다. 문제는 개발자의 연산 우선순위에 대한 혼란에서 비롯됩니다.</p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">Orientation GetOrientation (bool b)
{
  int posOne = 1;
  int posTwo = 2;
  return b ? posOne : posTwo;    // V2022
}

메서드 시작 시 입력 매개변수 키에 빈 문자열 또는 null이 있는지 확인합니다.

그런데 조건식의 논리에 오류가 있습니다. not 연산자의 우선순위는 or 연산자의 우선순위보다 높습니다. 결과적으로 부정은 표현식의 오른쪽에 적용되지 않습니다. 또한 키가 null로 설정되어 있으면 조건이 true가 됩니다.

이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.

V3208 [유니티 엔진]

유니티 엔진. 'UnityEngine.Object'와 함께 'WeakReference'를 사용하는 것은 지원되지 않습니다. GC는 네이티브 객체에 연결되어 있기 때문에 객체의 메모리를 회수하지 않습니다.

이것은 새로운 Unity 관련 규칙 시리즈 중 첫 번째 진단 규칙입니다.

System.WeakReference와 함께 UnityEngine.Object(또는 여기에서 상속된 다른 개체)의 사용을 감지하는 것을 목표로 합니다.

엔진 자체에서 암시적으로 인스턴스를 사용하기 때문에 약한 참조의 동작이 예상한 것과 다를 수 있습니다.

PVS-Studio 경고가 포함된 코드 예:

void SomeCheck(const char *val)
{
  if (!val) throw std::runtime_error { "" };
  ....
}

void Foo()
{
  const char *val = ....;
  try
  {
    SomeCheck(val);              // 



<p>예제에서는 GameObject 클래스의 개체에 대한 약한 참조를 볼 수 있습니다. 작성자가 이 개체에 대한 강력한 참조를 생성하지 않은 경우에도 가비지 수집기가 해당 개체를 정리할 수 없습니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V3209 [유니티 엔진]
</h3>

<h4>
  
  
  유니티 엔진. 'Awaitable' 개체에 대해 두 번 이상 Await를 사용하면 예외 또는 교착 상태가 발생할 수 있습니다. 이러한 개체는 대기된 후 풀로 반환되기 때문입니다.
</h4>

<p>Unity의 또 다른 진단 규칙에서 분석기는 wait 연산자를 사용하여 동일한 UnityEngine.Awaitable 개체를 여러 번 사용하는 장소를 검색합니다. </p>

<p>개체는 최적화 목적으로 개체 풀에 저장됩니다. </p>

<p>통화 대기 시 Awaitable 개체가 풀로 반환됩니다. 그 후 동일한 객체에 다시 Wait를 적용하면 예외가 발생합니다. 어떤 경우에는 교착상태가 발생할 수도 있습니다.</p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">typedef int fun_t(void);

typedef const fun_t const_qual_fun_t;          // 



<p>이 코드에서는 예외 또는 교착 상태가 발생합니다. 이유를 설명하겠습니다. 우리는 Waitable의 wait 호출을 사용하여 값을 얻습니다. 그런 다음 이 값으로 결과 변수를 초기화합니다. 조건부 구성에서 이전에 Wait가 Waitable에 적용되었으므로 교착 상태가 발생합니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V3210 [유니티 엔진]
</h3>

<h4>
  
  
  유니티 엔진. Unity는 'Destroy' 또는 'DestroyImmediate' 메소드를 사용하여 'Transform' 컴포넌트를 제거하는 것을 허용하지 않습니다. 메서드 호출은 무시됩니다.
</h4>

<p>이 진단 규칙의 목적은 UnityEngine.Object 클래스의 Destroy 또는 DestroyImmediate 메서드 호출과 관련된 이상 현상을 탐지하는 것입니다. </p>

<p>UnityEngine.Transform 유형의 인수를 사용하는 상황에서 문제가 발생합니다. 이로 인해 메서드 호출 중에 오류가 발생합니다. Unity에서는 게임 개체에서 Transform 구성 요소를 제거하는 것이 허용되지 않습니다.</p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">Orientation GetOrientation (bool b)
{
  int posOne = 1;
  int posTwo = 2;
  return b ? posOne : posTwo;    // V2022
}

MonoBehaviour 기본 클래스의 변환 속성은 Destroy 메서드에 인수로 전달되는 Transform 클래스의 인스턴스를 반환합니다.

이런 방식으로 메소드를 호출하면 Unity에서는 오류 메시지를 표시하지만 컴포넌트 자체는 삭제되지 않습니다.

이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.

V4007 [유니티 엔진]

유니티 엔진. 성능에 민감한 상황에서는 UnityEngine 객체를 생성하거나 삭제하지 마세요. 대신 활성화 및 비활성화를 고려하십시오.

이 진단 규칙은 다양한 범위의 오류, 즉 성능 문제를 대상으로 합니다.

정적 분석이 Unity 프로젝트 최적화에 어떻게 도움이 되는지 관심이 있다면 이 기사를 읽어보시기 바랍니다.

이 규칙의 목적은 분석기가 자주 실행되는 메서드에서 Unity 객체 생성을 감지하도록 돕는 것입니다.

게임 개체의 정기적인 생성/파괴는 CPU에 부하를 줄 뿐만 아니라 가비지 수집기 호출 빈도도 증가시킵니다. 이는 성능에 영향을 미칩니다.

PVS-Studio 경고가 포함된 코드 예:

void SomeCheck(const char *val)
{
  if (!val) throw std::runtime_error { "" };
  ....
}

void Foo()
{
  const char *val = ....;
  try
  {
    SomeCheck(val);              // 



<p>여기 Update 메서드에서는 게임 개체 _instance가 생성되고 삭제됩니다. Update는 프레임이 업데이트될 때마다 실행되므로, 가능하면 이러한 작업은 피하는 것이 좋습니다.  </p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<p>그런데 다른 Unity 진단 기능은 아직 제공되지 않았습니다! 저희 팀이 전하는 좋은 소식을 받아보세요 :)</p>

<h3>
  
  
  한 가지 더...
</h3>

<p>C# 분석기의 중요한 개선 사항 중 하나는 호출 간 메서드 반환 값의 변경 사항을 추적하는 것입니다. 무엇이 바뀌나요? 분해해 보겠습니다.</p>

<p>다음 예를 확인하세요.<br>
</p>

<pre class="brush:php;toolbar:false">typedef int fun_t(void);

typedef const fun_t const_qual_fun_t;          // 



<p>Example() 메서드는 Foo()의 반환 값이 null인지 확인합니다. 그런 다음 조건 본문에서 Foo() 메서드가 다시 호출되고 해당 반환 값이 역참조됩니다.</p>

<p>이전에는 분석기가 호출 컨텍스트를 고려하지 않고 선언 코드에만 초점을 맞추기 때문에 이 경우 경고를 생성했습니다. null이 반환될 수 있음을 암시하는 데 사용되는 분석기입니다.</p>

<p>이제 분석기는 Foo()가 두 경우 모두 동일한 값을 반환하며 경고가 없다는 것을 이해합니다.</p>

<p>그런데 코드를 약간 수정한 예를 살펴보겠습니다...<br>
</p>

<pre class="brush:php;toolbar:false">Orientation GetOrientation (bool b)
{
  int posOne = 1;
  int posTwo = 2;
  return b ? posOne : posTwo;    // V2022
}

Foo() 메소드 선언에서 _condition == true일 때 메소드가 null이 아님을 반환한다는 것을 알 수 있습니다.

분석기는 두 번째 호출 전에 _condition 필드 변경을 확인하고 Foo() 내부에 사용된 필드가 변경된 경우 Foo()의 반환 값도 변경되었을 수 있다고 가정합니다.

결과적으로 역참조 가능성에 대한 경고가 유지됩니다.

이제 C# 분석기가 .NET 9 프로젝트 분석을 지원합니다! 여기에서 PVS-Studio 7.34의 이러한 기능과 기타 새로운 기능에 대해 자세히 알아보세요.

자바

PVS-Studio 7.34가 출시되면서 이제 Java 분석기에 오염 분석 메커니즘이 생겼습니다!

이 메커니즘은 SQL 주입 검색이라는 첫 번째 진단 규칙의 기초가 되었습니다. Java 분석기의 향후 업데이트는 SAST, 가장 일반적인 잠재적 취약점이 포함된 OWASP 상위 10개 목록 및 기타 오염 관련 진단 규칙에 중점을 둘 것입니다.

지금은 가치가 있는 몇 가지 새로운 일반 분석 규칙부터 시작하겠습니다.

V6123

증가/감소 연산 후에는 수정된 피연산자 값이 사용되지 않습니다.

이 새로운 진단 규칙은 후위 연산 값이 사용되지 않는 코드 영역을 강조합니다.

문제는 작업이 중복되거나 더 심각하게는 작업이 혼동되어 개발자가 접두사 1을 사용하고 싶어한다는 것입니다.

PVS-Studio 경고가 포함된 코드 예:

void SomeCheck(const char *val)
{
  if (!val) throw std::runtime_error { "" };
  ....
}

void Foo()
{
  const char *val = ....;
  try
  {
    SomeCheck(val);              // 



<p>연산자는calculateSomething 메소드가 반환하는 값에 영향을 주지 않습니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V6124
</h3>

<h4>
  
  
  정수 리터럴을 값 범위가 더 작은 유형으로 변환하면 오버플로가 발생합니다.
</h4>

<p>이 진단 규칙의 이름에서 알 수 있듯이 오버플로 가능성을 감지합니다.</p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">typedef int fun_t(void);

typedef const fun_t const_qual_fun_t;          // 



<p>정수형 변수에 유효한 범위를 벗어난 값이 할당되어 오버플로가 발생합니다.</p>

<p>변수는 분명히 개발자가 할당하려고 시도한 값과 다른 값을 저장합니다.</p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<h3>
  
  
  V6125
</h3>

<h4>
  
  
  동기화된 컨텍스트 외부에서 'wait', 'notify' 및 ​​'notifyAll' 메소드를 호출하면 'IllegalMonitorStateException'이 발생합니다.
</h4>

<p>이 진단은 동기화 문제를 식별하는 데 도움이 됩니다.</p>

<p>PVS-Studio 경고가 포함된 코드 예:<br>
</p>

<pre class="brush:php;toolbar:false">Orientation GetOrientation (bool b)
{
  int posOne = 1;
  int posTwo = 2;
  return b ? posOne : posTwo;    // V2022
}

분석기는 동기화되지 않은 컨텍스트에서 호출될 수 있는 wait, inform 및 informAll 메소드를 포착합니다. 동기화가 발생하는 개체의 모니터와 함께 작동합니다. 즉, 해당 호출은 동기화된 컨텍스트와 동기화가 발생하는 개체에서만 정확합니다.

wait, inform 또는 informAll 메소드가 동기화되지 않은 컨텍스트나 잘못된 객체에서 호출되면 IllegalMonitorStateException 예외가 발생합니다.

이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.

V5309 [OWASP 표준]

OWASP. SQL 주입이 가능합니다. 잠재적으로 오염된 데이터는 SQL 명령을 생성하는 데 사용됩니다.

Java 분석기의 첫 번째 Taint 관련 진단 규칙! 더 구체적으로 말하면, 이제 분석기는 잠재적인 SQL 주입을 감지할 수 있습니다.

SQL 주입은 공격자가 자신의 코드를 SQL 쿼리에 주입할 수 있는 취약점입니다. 쿼리가 외부 데이터를 사용하는 경우 이를 올바르게 검증하지 않으면 데이터베이스에 저장된 정보의 무결성과 기밀성이 위험해질 수 있습니다.

void SomeCheck(const char *val)
{
  if (!val) throw std::runtime_error { "" };
  ....
}

void Foo()
{
  const char *val = ....;
  try
  {
    SomeCheck(val);              // 



<p>사용자가 악의적인 것으로 판명되고 param의 값이 대략 다음과 같은 경우:- "111' 또는 1=1; 테이블 사용자 삭제; ' "를 선택하면 사용자 테이블과 작별할 수 있습니다. 따라서 외부 데이터를 확인하는 것이 중요합니다. </p>

<blockquote>
<p>이 진단 규칙에 대한 자세한 내용은 설명서를 확인하세요.</p>
</blockquote>

<p>읽어주셔서 감사합니다!</p>

<p>기사 요청이나 질문이 있는 경우 주저하지 말고 피드백 양식을 통해 보내주세요. 마지막으로, 댓글로 여러분의 생각을 듣고 싶습니다. :)</p>


          

            
        

위 내용은 PVS-Studio 4의 새로운 진단 규칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
2025 년 상위 4 개의 JavaScript 프레임 워크 : React, Angular, Vue, Svelte2025 년 상위 4 개의 JavaScript 프레임 워크 : React, Angular, Vue, SvelteMar 07, 2025 pm 06:09 PM

이 기사는 2025 년에 상위 4 개의 JavaScript 프레임 워크 (React, Angular, Vue, Svelte)를 분석하여 성능, 확장 성 및 향후 전망을 비교합니다. 강력한 공동체와 생태계로 인해 모두 지배적이지만 상대적으로 대중적으로

카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?카페인 또는 구아바 캐시와 같은 라이브러리를 사용하여 자바 애플리케이션에서 다단계 캐싱을 구현하려면 어떻게해야합니까?Mar 17, 2025 pm 05:44 PM

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

Node.js 20 : 주요 성능 향상 및 새로운 기능Node.js 20 : 주요 성능 향상 및 새로운 기능Mar 07, 2025 pm 06:12 PM

Node.js 20은 V8 엔진 개선, 특히 더 빠른 쓰레기 수집 및 I/O를 통해 성능을 크게 향상시킵니다. 새로운 기능에는 더 나은 webAssembly 지원 및 정제 디버깅 도구, 개발자 생산성 및 응용 속도 향상이 포함됩니다.

Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Java의 클래스로드 메커니즘은 다른 클래스 로더 및 대표 모델을 포함하여 어떻게 작동합니까?Mar 17, 2025 pm 05:35 PM

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

빙산 : 데이터 호수 테이블의 미래빙산 : 데이터 호수 테이블의 미래Mar 07, 2025 pm 06:31 PM

대규모 분석 데이터 세트를위한 오픈 테이블 형식 인 Iceberg는 데이터 호수 성능 및 확장 성을 향상시킵니다. 내부 메타 데이터 관리를 통한 Parquet/Orc의 한계를 해결하여 효율적인 스키마 진화, 시간 여행, 동시 W를 가능하게합니다.

Spring Boot Snakeyaml 2.0 CVE-2022-1471 문제 고정Spring Boot Snakeyaml 2.0 CVE-2022-1471 문제 고정Mar 07, 2025 pm 05:52 PM

이 기사는 원격 코드 실행을 허용하는 중요한 결함 인 Snakeyaml의 CVE-2022-1471 취약점을 다룹니다. Snakeyaml 1.33 이상으로 Spring Boot 응용 프로그램을 업그레이드하는 방법에 대해 자세히 설명합니다.

Java에서 기능 프로그래밍 기술을 어떻게 구현할 수 있습니까?Java에서 기능 프로그래밍 기술을 어떻게 구현할 수 있습니까?Mar 11, 2025 pm 05:51 PM

이 기사는 Lambda 표현식, 스트림 API, 메소드 참조 및 선택 사항을 사용하여 기능 프로그래밍을 Java에 통합합니다. 간결함과 불변성을 통한 개선 된 코드 가독성 및 유지 관리 가능성과 같은 이점을 강조합니다.

고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?고급 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 또는 Gradle을 어떻게 사용합니까?Mar 17, 2025 pm 05:46 PM

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기