maven TroubleShooting
Nexus integration
nexus deploy 시 400 Error
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.114s
[INFO] Finished at: Wed May 15 15:12:19 KST 2013
[INFO] Final Memory: 7M/238M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project deploy-test: Failed to deploy artifacts: Could not transfer artifact org.example.app:deploy-test:jar:1.1 from/to tech.release (https://nexus.ktnet.com/content/repositories/com.company/): Failed to transfer file: https://nexus.company.com/content/repositories/com.ktnet/org/example/app/deploy-test/1.1/deploy-test-1.1.jar. Return code is: 400, ReasonPhrase:Bad Request. -> [Help 1]
원인: Release repository 일 경우 같은 version 이 이미 deploy 되어 있음
해결방안: version up
401 Aurhotized Error
원인
repository 에 권한 없음.
해결
${HOME}/.m2/settings.xml 에 암호 설정
nexus repository 에 해당 버전이 있는데 library 가 없다고 에러 발생
원인
- maven 의 release updatePolicy 는 default가 daily 임 (http://maven.apache.org/ref/3.1.0/maven-settings/settings.html)
- 해당 artifact를 nexus 에 deploy 하기전에 maven 을 실행했다면 local cache 에는 해당 artifact가 없고 caching을 위한 .lastUpdated 파일만 존재함
- 따라서 다음 update 시간인 내일이 되기전가지는 artifact 가 없어서 빌드가 실패함
"[ERROR] Failed to execute goal on project etsCoreServer: Could not resolve dependencies for project com.company.ets:etsCoreServer:war:10: Failure to find com.company.ets:ets-common:jar:0.91.08 inhttps://nexus.company.com/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of Company-central has elapsed or updates are forced -> [Help 1]"
해결
1 .m2 의 cache 를 삭제
maven의 cache 폴더인 $HOME/.m2/repository 의 $artifact-$version 폴더를 삭제하고 maven 재구동 (Ex: rm -rf ~/.m2/repository/com/company/ets/ets-common/0.91.08)
2 .maven 실행시 --update-snapshots 를 주어서 실행
Forces a check for updated releases and snapshots on remote repositories
3 .updatePolicy 수정
아래의 snapshot repository의 updatepolicy 를 참고하여 always 나 interval:xxx 로 수정
Snapshots 으로 deploy중인데 Nexus Repository 에서 최근 snapshot을 못 가져옴
원인
snapshot repository의 기본 updatePolicy 가 daily 임
해결
${HOME}/.m2/settings.xml 에 다음 내용 추가 - http://maven.apache.org/settings.html#Repositories
- updatePolicy: This element specifies how often updates should attempt to occur. Maven will compare the local POM's timestamp (stored in a repository's maven-metadata file) to the remote. The choices are: always, daily (default), interval:X (where X is an integer in minutes) or never.
<profiles>
<profile>
...
<repositories>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<url>http://snapshots.maven.codehaus.org/maven2</url>
<layout>default</layout>
</repository>
</repositories>
...
</profile>
</profiles>
기타
Configure Source file Encoding
증상
When I run maven install on my multi module maven project I always get the following output:
처리
pom.xml 에 다음 내용 추가
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
See also http://maven.apache.org/general.html#encoding-warning
“Updating Maven Project”. Unsupported IClasspathEntry kind=4?
증상
maven project import 시 위 메시지가 나오며 정상적으로 import가 안 됨.
처리
m2e bug 이며 다음 순서로 처리
- m2e 업데이트 (http://eclipse.org/m2e/download/ 참고)
maven nature Diable(프로젝트 메뉴에서 우클릭)
- run mvn eclipse:clean (while your project is open in STS/eclipse)
- 'Configure'-> 'Convert to Maven Project')
“webxml attribute is required” error in Maven Error
증상
Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project my-project: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1]
처리
maven-war-plugin 에 web.xml 의 경로를 지정
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webXml>src\main\webapp\WEB-INF\web.xml</webXml>
</configuration>
</plugin>
archetype:generate 실행 에러 - The goal you specified requires a project to execute but there is no POM in this directory.
증상
The goal you specified requires a project to execute but there is no POM in this directory.please verify you invoked Maven from the correct directory.
처리
Windows 의 cmd 에서 바로 실행시 파라미터를 제대로 처리하지 못 해서 발생하며 다음과 같이 처리
1.Batch 파일에서 실행
2.파라미터를 " 로 둘러 싸서 실행
Before
mvn archetype:generate -B -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.example -DartifactId=dogstore -Dversion=1.0-SNAPSHOT
After
mvn archetype:generate -B "-DarchetypeGroupId=org.apache.maven.archetypes" "-DarchetypeArtifactId=maven-archetype-webapp" "-DgroupId=com.example" "-DartifactId=dogstore" "-Dversion=1.0-SNAPSHOT"