2014-09-05 3 views
3

저는 Pharo에서 간단한 프로젝트를 개발하려고합니다. Metacello에 의존성을 추가하고 싶습니다. 내 프로젝트는 Glamour, Roassal 및 XMLSupport에 달려 있습니다.Pharo dependency hell

내 프로젝트를 깔끔하게 설치하는 방법은 먼저 의존성을 수동으로 설치하는 것입니다. 책 Deep into Pharo 다음에 할 수있다

Gofer new 
    smalltalkhubUser: 'Moose' project: 'Glamour'; 
    package: 'ConfigurationOfGlamour'; 
    load. 
(Smalltalk at: #ConfigurationOfGlamour) perform: #loadDefault. 

Gofer new smalltalkhubUser: 'ObjectProfile' 
    project: 'Roassal'; 
    package: 'ConfigurationOfRoassal'; 
    load. 
(Smalltalk at: #ConfigurationOfRoassal) load. 

Gofer new 
    squeaksource: 'XMLSupport'; 
    package: 'ConfigurationOfXMLSupport'; 
    load. 
(Smalltalk at: #ConfigurationOfXMLSupport) perform: #loadDefault. 

그리고 나의 프로젝트는 잘 될 것이다.

저는 Versionner를 사용하여 ConfigurationOfMyProject을 만들려고했습니다. 현재 이미지 (2.6 스냅 샷, 1.430 및 1.2.1)에 현재 설치된 버전을 사용하여 Glamour, Roassal 및 XMLSupport를 종속성으로 추가했습니다.

문제는 신선한 이미지에서 Metacello를 사용하여 프로젝트를로드 할 수 없다는 것입니다. 프로젝트는 잘로드되지만 클래스를로드하려고 할 때마다 글래머에 오류가 누락되었습니다. 더욱이, 뭔가 다른 점은 분명합니다. 월드 메뉴조차도 다른 항목을 가지고 있기 때문입니다.

안정적인 글래머 (2.1)를 사용하는 것을 포함하여 다른 버전의 조합을 시도했지만 Versioner에서 프로젝트를 열지 못하는 것을 포함하여 더 많은 오류가 발생했습니다 (누락 된 Roassal 이름에 대해 불만을 토로 함).

이러한 종속성을 명확하게 추가하는 올바른 방법은 무엇입니까?

내가 구성이 클래스 에 ConfigurationOf < 경우 PROJ-이름 > 당신이 #configuration 메시지 사용으로로드 할 수 있음을 강조하고자하는 모든의

답변

2

첫째 : 프로젝트를 볼 수 없습니다

Gofer new 
    smalltalkhubUser: 'Moose' project: 'Glamour'; 
    configuration; 
    load. 
(Smalltalk at: #ConfigurationOfGlamour) perform: #loadDefault. 

AI를, I 직접 구성을 작성하도록 제안 할 수 있습니다. Dead simple intro to Metacello이라는 쉬운 자습서가 있습니다. 또한 당신은 내가 Roassal과 글래머 같은 프로젝트 인상을 가지고 아주 오래된 안정적인 버전이, #development 버전을로드 할 수 있습니다

baseline01: spec 
    <version: '0.1'> 

    spec for: #common do: [ 
    spec blessing: #release. 
    spec repository: 'your repo url'. 

    spec 
     package: 'YourPackage' with: [ 
     spec requires: #('Glamour' 'Roassal' 'XMLSupport') ]. 
    "also maybe you have a couple of packages that depend on different projects" 

    spec project: 'Glamour' with: [ 
     spec 
     className: 'ConfigurationOf Glamour'; 
     repository: 'http://smalltalkhub.com/mc/Moose/Glamour/main'; 
     version: #'2.6-snapshot' ]. 

    spec project: 'Roassal' with: [ 
     spec 
     className: 'ConfigurationOfRoassal'; 
     repository: 'http://smalltalkhub.com/mc/ObjectProfile/Roassal/main'; 
     version: #'1.430' ]. 

    "and same for XMLSupport" ]. 

:

당신의 설명에 따르면이 같은 것을해야한다. 또한 Roassal2가 활발히 개발되었으며 Roaseal in Moose 플랫폼을 대체 할 것입니다. 아마 사용을 고려하고 싶을 것입니다.

+0

도움 주셔서 감사합니다. 그래도 이미지에 ConfigurationOfMyProject라는 오래된 버전이 많이 있기 때문에 문제가 있습니다. 모든 것을 삭제하고 다시 시작하는 방법이 있습니까? – Andrea

+0

좋아, 나는 그것을 잘 만들 수 있었다. 먼저 이미지에서 ConfigurationOfMyProject를 언로드 한 다음 패키지 캐시 및 리포지토리에서 수동으로 제거한 다음 마지막으로 신선한 상태로 시작할 수있었습니다. – Andrea

+0

여전히 질문이 하나 있습니다. 내 이미지를 새로운 이미지로로드 한 후 (현재 작동) 세계 메뉴는 약간 다릅니다 : Roassal 요소는 하위 메뉴에 없습니다. 위와 같이 Roassal을로드하면 (Gofer로) 고정되어 있지만 Roassal의 새 버전을로드하려고한다는 경고가 표시되고 작업 복사본이 더럽습니다. 왜 그런가요? 그것은 글래머가 그것을 변경했기 때문입니까?나는 다소 혼란스러운 태도이다 – Andrea

1

필자는 Metacello의 어셈블리 코드를 직접 작성하는 것을 권장하지 않습니다. 플랫폼 별 코드 (예 : Pharo 1.4 대 Squeak 4.5 용 코드)로 스몰 토크 플랫폼 프로젝트에서 작업하지 않는 한 - 아직 탐험되지 않은 지역, Versionner가 당신을위한 도구입니다. 필자는 수십개의 configs를 작성했으며 아직로드 블록에 부딪치지 않았습니다.

종속성으로 추가했다고 말하면 "종속 프로젝트"창의 프로젝트로 추가 했습니까?

enter image description here

그렇다면, 당신은 또한 그들에 따라 프로젝트의 패키지를 지정해야합니다. 이렇게하려면 "패키지"창에서 프로젝트의 관련 패키지를 선택합니다.

enter image description here

이제 단지 활성화되었다 연필 아이콘이있는 편집 버튼을 클릭합니다. 나타나는 대화 상자에서 녹색 + 버튼을 클릭하고 관심있는 외부 프로젝트를 추가하십시오.

enter image description here

+0

예, 이것이 제가 한 것입니다. 꽤 많은 실험을 한 후에 Glamour와 Roassal 사이에 로딩 순서가 문제가 된 것처럼 보입니다. 외관상으로는, 나가 Roassal를 첫째로 두는 경우에 - 나가 한 무슨이다 - Glamour 선적은 나의 문제점의 뿌리 인 다른 버전으로 Roassal를 덮어 쓸 것입니다. 이상하게도, 처음 로아 씨와 글래머를로드하면 글래머가 덮어 쓰여집니다. 나는주기적인 의존성이 의심 스럽다. 결코 좋은 생각이 아니다. – Andrea

1

당신이 Pharo의 이전 버전에서이 문제를하려고하는 것 같습니다?

Roassal은 Roassal2로 대체되었으며 XML 지원은 PharoExtras의 ConfigurationOfXMLWriter 및 ConfigurationOfXMLParser로 분할 된 smalltalkhub에 있습니다.

Glamour에서 올바른 그룹을로드하는 경우 Glassor가 이미 Roassal (2)에 의존하므로 Roassal에 대한 종속성을 설명 할 필요가 없습니다. 그것은 당신의주기적인 의존성을 설명합니다.

pharo 메일 링리스트 에서 최근에 우리가 이야기 해본 문제는 #stable을 사용할 수있는 상징적 버전 이름이 아닙니다. Seaside/Magritte/Grease 프로젝트에서 우리는 'release3.1'스타일 기호 버전 이름을 사용하도록 변경했습니다. 이렇게하면 안정적으로 진행될 때 파급 효과가 적습니다.

스냅 샷 버전은 절대로 종속성이 없어야하며 현재로드되는 내용을 설명하며 기본적으로 업그레이드 할 수 없습니다.

[편집] 기본적으로 Metacello는 최신 버전을 설치하지 않는 것이 현명합니다. 이것은 다른 패키지로 옮겨지지 않는 한 꽤 잘 작동합니다. 그래서 불행한 점이있어서 비상업적 인 조합으로 끝났습니다.

Metacello는 복잡한 워크 플로를 지원하고 다른 워크 플로는 다양한 워크 플로를 사용해야합니다. 일을하는 가장 좋은 방법에 대해 합의에 도달하는 데는 종종 시간이 걸립니다.

Roassal은 글래머에 의존하지 않는,하지만 당신은 당신의 자신의 구성에주기를 만들 수 있습니다 : 서버 안정성 문제가 있었다했기 때문에

패키지가 SS3에 squeaksource에서 이동 smalltalkhub했다. 최근에 이러한 문제가 수정 된 것 같습니다. xml 지원은 많은 응용 프로그램이 실제로 XML의 작성과 읽기 모두를 필요로하지 않는다는 점에서 분열되었습니다.

일단 작동하는 구성이 있으면 pharo의 연속 통합 서버에서 빌드하고 테스트하는 것이 좋습니다. 실제로 응용 프로그램이 아니라면 적어도 사용중인 오픈 소스 파트는 그렇지 않습니다. 그런 식으로 Pharo, Glamour & Roassal 팀은 변경 사항이 적용되는지 여부를 알 수 있습니다.

+0

나는 Pharo의 절대 초보자입니다. Pharo 3.0을 사용하고 있으며, Glamor와 Roassal을 설치하기 위해 PBE2에 관한 지침을 따라 왔습니다. 그건 그렇고, 글래머가 로살에게 달려 있다는 것을 이해합니다. 불행히도 Roassal1에 따라 프로젝트를 시작했지만 더 잘 알지 못하고 Roassal2로 번역하는 데 약간의 시간이 걸립니다. XML 지원 정보 : SmalltalkHub에서 패키지를로드하는 경우 동일한 클래스로 끝나거나 두 프로젝트가 서로 다른 프로젝트입니까? – Andrea