Google은 구글 코드 (SVN)와 ANT (빌드 작업)에서 git (GitHub) 및 maven으로 이동 한 오픈 소스 프로젝트 (ps3mediaserver)에 참여하고 있습니다. 나는 내 자신의 포크 (pms-mlx라고 불린다.)를 가지고 있는데, 내가 풀어 놓을 때 기본 꾸러미의 일부인 일부 플러그인을 유지하고 싶다. 저는 꽤 새로운 프로젝트입니다. 프로젝트가 어떻게 메이븐 웨이를 존중하도록 구조화되어야하는지 너무 확신하지 못합니다.
환경이 이전에 어떻게 작동했는지부터 설명하고 시작하여 Maven으로 이동하는 것에 대한 생각을 전합니다.멀티 플랫폼 멀티 모듈 메이븐 프로젝트 패키징
링크 :
- 올드 : SVN + ANT ps3mediaserver project on google code
- 올드 : SVN + ANT pms-mlx project on SourceForge
- 새로운 기능 : Git + Maven ps3mediaserver project on GitHub
- 새로운 기능 : Git + Maven pms-mlx project on GitHub
이전 동작 :
프로젝트 구조 :
+--workspace
+--plugins
+--plugin1
build.xml
+--plugin2
build.xml
+--ps3mediaserver_mlx
+--plugins
build.xml
주요 프로젝트는 ps3mediaserver_mlx되어, 모든 플러그인은 작업 공간/플러그인 폴더의 하위 폴더에 살고 있습니다.
ps3mediaserver_mlx/build.xml에는 기본 프로젝트의 jar 파일을 빌드하고 workspace/pms_no_libs.jar 파일로 복사 한 후이 위치에서 플러그인으로 참조 할 대상 BuildWithoutLibs가 있습니다.
플러그인의 빌드 대상을 실행할 때 플러그인이 빌드되고 결과 jar가 ps3mediaserver_mlx/plugins/[plugin_name] .jar로 복사됩니다.
마지막으로 ps3mediaserver_mlx/build.xml에서 빌드 대상을 사용하여 응용 프로그램을 패키징하면 workspace/ps3mediaserver_mlx/plugins에 포함 된 플러그인이 패키징됩니다 (Windows의 경우 exe 설치 프로그램에서, OSX의 경우 dmg 또는 Linux의 경우 tar.gz) .
새로운 동작은 프로젝트 구조는 변경되었습니다 :
+-- workspace/
+-- pom.xml (global-pom)
+-- ps3mediaserver/
| +-- pom.xml (pms-pom)
| +-- src/
| ...
+-- plugins/
| +-- pom.xml (plugins-pom)
| +-- Plugin1/
| pom.xml (plugin1-pom)
| src/
| +-- Plugin2/
| pom.xml (plugin2-pom)
| src/
+-- pms-package/
+-- pom.xml (package-pom)
+-- src/main/assembly/
+-- src/main/external-resources/
Responsabilities을 : PMS에 의해 사용되는 모든 종속성을 포함
global-pom 루트 치어. 이렇게하면 플러그인에서 다시 선언하지 않고 동일한 버전을 사용할 수 있습니다 (좋은 생각입니까?). 모든 것을 구축하고 모든 프로젝트
<modules>
<module>ps3mediaserver</module>
<module>plugins</module>
<module>pms-package</module>
</modules>
pms-pom에서 같은 받는다는 명령을 수행하는 모듈 섹션을 포함하십시오 PMS가
plugins-pom 항아리 andbuilds 글로벌 치어로부터 상속 : 글로벌 치어로부터 상속; pms에 대한 의존성을 포함합니다 (모든 플러그인에 필요합니다).
를 구축 할 필요가 모든 모듈의 목록을 포함pluginX - 치어는 : 플러그인 - 치어로부터 상속 및 플러그인
package-pom에 대한 사용자 정의 구성을 포함 :이 건설되고있다 플랫폼에 따라 PMS를 포장하는 책임인가 에.
이 구조는 사용할 수있는 방법을 나타 냅니까?
모든 것이 포장되어 있습니다. 즉, 주요 응용 프로그램 jar뿐만 아니라 모든 플러그인을 빌드하고 패키지해야합니다. package-pom이 그렇게 할 책임이 있습니다.
원래 응용 프로그램에는 pom.xml이 하나만 있고 포장은 Windows, Linux 및 OS X 용으로 다른 프로필을 사용하여 수행됩니다. 현재 내가 작업하고있는 것은 OSX 용이며 osxappbundle-maven-plugin을 사용하지만 소스 코드는 절대로 사용하지 않습니다. 앱 파일에 패키지되어 있습니다. 패키징 프로젝트가 더 이상 실제 프로젝트를 상속하지 않기 때문입니다.
응용 프로그램 파일에 올바르게 패키지화하기 위해 빌드 된 jar 파일을 참조하려면 어떻게해야합니까?
additionalResources에서 jar를 참조하고 사용자 정의 클래스 경로로 시도했지만 성공하지 못했습니다.
내가 알아 차린 첫 번째 사실은 당신이 당신의 pom에 Maven의 모범 사례에 반대되는 많은 저장소를 정의했다는 것입니다. – khmarbaise
아티팩트를 만들지 않은 것에 대한 여러분의 의견 중 일부는 잘못되었습니다 : http://search.maven.org/#search%7Cga%7C1%7Ccom.jgoodies – khmarbaise
다음으로 루트 폴리에서 의존성을 정의하면 안됩니다 의존성 관리 블록에서. (http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html). – khmarbaise