2013-01-11 26 views
5

Tôi đang phát triển và thực hiện một số tùy chỉnh trên Chia sẻ. IDE của tôi là Eclipse Juno và không gian làm việc được tạo thành từ các yếu tố sau:Làm thế nào để tăng tốc độ phát triển Alfresco Share

  • dự án ngoài trời web dự án
  • mở rộng Java
  • dự án web phần

Cả hai dự án web ngoài trời và chia sẻ được triển khai trong các cá thể Tomcat riêng biệt, theo cách này tôi có thể tăng tốc một chút các nhiệm vụ phát triển của mình bằng cách khởi động lại cá thể Tomcat nơi Share được triển khai.

Tiện ích mở rộng của tôi Dự án Java có cùng cấu trúc như dự án Eclipse do Alfresco đề xuất. Y các nhiệm vụ Ant được cung cấp để biên dịch, nén các tệp JavaScript, đóng gói và triển khai tệp JAR kết quả trong Tomcat.

Tôi đang phát triển một số tiện ích con JavaScript phía máy khách mới, có nghĩa là mỗi khi tôi thực hiện thay đổi, tôi phải dừng Tomcat, khởi chạy kịch bản xây dựng Ant và bắt đầu lại để tôi phải thực hiện thường xuyên, bạn có thể đoán những gì một nỗi đau nó đang trở thành. Tôi đã tự hỏi nếu có tồn tại bất kỳ cách nào để tăng tốc độ các nhiệm vụ phát triển trên Share. Làm thế nào để nhóm phát triển Alfresco làm điều đó? Họ thiết lập loại môi trường nào?

Tôi đã suy nghĩ về việc tạo một mục tiêu Ant mới, nóng triển khai nội dung của dự án mở rộng vào dự án Chia sẻ web được triển khai, có tính đến đường dẫn tài khoản của khóa học; cơ chế đó phải cho phép hoạt động ngược lại bằng cách này. Điều đó có khả thi không? Ý tưởng sẽ có cơ chế triển khai tương tự như khi bạn phát triển các dự án web thông thường: khi bạn thực hiện bất kỳ thay đổi nào, bạn chỉ cần nhấn nút "Xuất bản" và các thay đổi được điền vào máy chủ.

Tôi muốn biết một số mẹo và ý tưởng, đặc biệt từ nhóm nhà phát triển Alfresco nếu có thể.

PS: Tôi đã đọc https://forums.alfresco.com/en/viewtopic.php?f=47&t=44850https://forums.alfresco.com/en/viewtopic.php?f=48&t=18749.

Trả lời

2

Đây là giải pháp đang hoạt động 100% như tôi mong đợi. Tôi đã đưa ra điều này sau khi câu trả lời của @ erik-b và @ jorn-horstmann và xem xét một số bài viết tôi đã đọc.

Vì vậy, về cơ bản tôi có mục tiêu Ant tiếp theo mà nóng triển khai các nội dung của Chia sẻ dự án mở rộng Java của tôi:

<!-- 
    Hot copy individual files into appropriate deployment folder (e.g. $TOMCAT_HOME/webapps/share) 
--> 
<target name="hotdeploy-tomcat-share" depends="clean, prepare, build-jar" description="Hot copy individual files into appropriate deployment folder (e.g. $TOMCAT_HOME/webapps/share)"> 
    <echo message="Generating and deploying JAR file with custom configuration files" /> 
    <jar destfile="${dist.dir}/${jar.name}"> 
     <!-- Only including configuration XML files such as share-config-custom.xml --> 
     <fileset dir="${build.jar.dir}" includes="**/META-INF/*.xml" /> 
    </jar> 
    <copy todir="${tomcat.share.deployment.path}/WEB-INF/lib"> 
     <fileset file="${dist.dir}/${jar.name}" /> 
    </copy> 

    <echo message="Hot deploying Share files" /> 
    <copy todir="${tomcat.share.deployment.path}/WEB-INF/classes" includeEmptyDirs="false"> 
     <fileset dir="${build.jar.dir}"> 
      <patternset refid="hotdeploy-tomcat-patternset" /> 
     </fileset> 
    </copy> 
</target> 

Auto-tải lại các module tính năng phải bị vô hiệu, nếu không mỗi khi bạn thực hiện mục tiêu Ant trên Tomcat sẽ tải lại Chia sẻ và các ứng dụng web khác được triển khai. Ngoài ra, tôi tin rằng nó cũng có thể triển khai nóng trong thư mục $ TOMCAT_HOME/shared/nhưng tôi chưa thử nó.

Dự án Java tôi đang sử dụng để phát triển tiện ích mở rộng của tôi là dự án mô hình này: http://code.google.com/p/share-extras/wiki/SampleProject. Có kịch bản xây dựng đầy đủ với các mục tiêu khác cần thiết.

Tôi cũng đang sử dụng này trong tôi share-config-custom.xml:

<!-- Global config section --> 
    <config replace="true"> 
     <flags> 
     <!-- 
      Developer debugging setting to turn on DEBUG mode for client scripts in the browser 
     --> 
     <client-debug>true</client-debug> 

     <!-- 
      LOGGING can always be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift). 
      This flag automatically activates logging on page load. 
     --> 
     <client-debug-autologging>false</client-debug-autologging> 
     </flags> 
    </config> 

    <config evaluator="string-compare" condition="WebFramework"> 
     <web-framework> 
     <!-- SpringSurf Autowire Runtime Settings --> 
     <!-- 
       Developers can set mode to 'development' to disable; SpringSurf caches, 
       FreeMarker template caching and Rhino JavaScript compilation. 
     --> 
     <autowire> 
      <!-- Pick the mode: "production" or "development" --> 
      <mode>development</mode> 
     </autowire> 

     <!-- Allows extension modules with <auto-deploy> set to true to be automatically deployed --> 
     <module-deployment> 
      <mode>manual</mode> 
      <enable-auto-deploy-modules>true</enable-auto-deploy-modules> 
     </module-deployment> 
     </web-framework> 
    </config> 

Đoạn mã XML cuối cùng tránh để làm mới webscripts sau khi bất kỳ thay đổi được thực hiện trên một trang FTL, ví dụ.

Tôi cũng đã thực hiện một số bài kiểm tra với JRebel nhưng sau khi trải nghiệm của tôi, tôi sẽ nói điều đó không giúp ích rất nhiều trong việc phát triển Chia sẻ.

Ngoài ra còn có nhiều thứ thú vị trong các bài viết tiếp theo:

http://blogs.alfresco.com/wp/kevinr/2010/04/07/developer-tips-for-alfresco-share-33/

http://techblog.zabuchy.net/2012/debugging-javascript-in-alfresco/

Hy vọng nó sẽ giúp những người khác.

7

Hai điều rằng tốc độ lên rất nhiều điều:

  • Đầu tư vào một giấy phép jrebel cho lớp nạp lại mà không cần máy chủ khởi động lại http://zeroturnaround.com/software/jrebel/

  • Xây dựng nhiệm vụ kiến ​​rằng sao chép webscripts đến thư mục đích và load lại webscripts với curl nếu cần thiết.

Ví dụ về một công việc tải lại một Alfresco Share webscript:

<target name="deploy-share-webscripts" depends="Share: Copy files" description="Refreshes the list of webscripts"> 
    <exec executable="curl"> 
    <arg value="-d"/> 
    <arg value="reset=on"/> 
    <arg value="http://admin:[email protected]${share.web.url}/page/console?reset=webscripts"/> 
    </exec> 
</target> 

Phụ thêm phần sao chép của nhiệm vụ kiến ​​(src-dirs được khai báo là thuộc tính trong đầu buildfile):

<echo message="- Copying java classes" /> 
    <copy todir="${warWebappTargetClasses}" overwrite="false" verbose="true"> 
     <fileset dir="${warTargetJavaDir}" /> 
    </copy> 

    <echo message="- Copying resource files" /> 
    <copy todir="${warWebappTargetClasses}" overwrite="false" verbose="true"> 
     <fileset dir="${warSrcResourcesDir}" > 
      <include name="**/model/*"/> 
      <include name="**/templates/**/*"/> 
      <include name="**/custom-model-context.xml"/> 
      <include name="**/web-client-config-custom.xml"/> 
      <include name="**/webclient.properties"/> 
      <include name="**/aka-model-resourcebundle*"/> 
      <include name="log4j.properties"/> 
     </fileset> 
    </copy> 

    <echo message="- Copying resource files from amp into war for quick deployment." /> 
    <copy todir="${warWebappTargetClasses}" overwrite="false" verbose="true"> 
     <fileset dir="${projectAmpResourcesSrcDir}" /> 
     <fileset dir="${projectAmpClassesDir}" /> 

     <fileset dir="${listmanagerAmpResourcesSrcDir}" /> 

    </copy> 

    <echo message="- Copying config files from amp into war for quick deployment." /> 
    <copy todir="${warWebappTargetClasses}\alfresco\module\Project-amp\" overwrite="false" verbose="true"> 

     <fileset dir="${projectAmpConfigSrcDir}" /> 


    </copy> 
</target> 

tôi sử dụng vòng đời maven ngoài trời http://wiki.alfresco.com/wiki/Managing_Alfresco_Lifecyle_with_Maven cho các thiết lập của tôi, mà còn tăng tốc mọi thứ. Tôi chắc chắn rất nhiều có thể được thêm vào chủ đề này.

+0

Ngoài việc nạp lại lớp (điều này ít quan trọng đối với tôi ở giai đoạn này), ý bạn là tạo một nhiệm vụ Ant sao chép tài nguyên mở rộng vào thư mục triển khai của Share trong Tomcat, tôi có sai không? Ví dụ, tài nguyên phía máy khách sẽ được sao chép vào ** tomcat/webapps/share/WebContent/my_resources_folder /...** hoặc trang tùy chỉnh vào ** tomcat/webapps/share/WebContent/WEB-INF/classes/alfresco /site-data/pages/my_custom_page.xml**. Nếu nó là những gì bạn có nghĩa là, làm một ví dụ về nhiệm vụ Ant như vậy? :) –

+0

Ok, đã thêm phần bản sao vào câu trả lời của tôi, vì định dạng mã trong phần nhận xét không lý tưởng ... – billerby

+0

Một câu hỏi khác @ erik-b, khi bạn nói về "thư mục đích", bạn có ý nghĩa gì? –

3

Bạn có thể tránh sao chép các bản ghi web vào tomcat bằng cách định cấu hình các đường dẫn bổ sung cho trình chia sẻ lớp học được chia sẻ với tomcats. Đây là cài đặt trong tomcat/conf/catalina.properties.Tôi thiết lập điều này trực tiếp đến thư mục nguồn dự án vì vậy không cần bước biên dịch.

shared.loader=${catalina.home}/shared/classes,${catalina.home}/shared/lib/*.jar,\ 
/path/to/my/dashlet/src/main/resources,\ 

Tôi cũng có các cài đặt sau trong shared/classes/alfresco/web-extension/share-config-custom.xml để cho phép tự động làm mới các mẫu và webscripts.

<alfresco-config> 
    <!-- Global config section --> 
    <config replace="true"> 
     <flags> 
      <!-- Developer debugging setting - DEBUG mode for client scripts in the browser --> 
      <client-debug>true</client-debug> 

      <!-- LOGGING can be toggled at runtime when in DEBUG mode (Ctrl, Ctrl, Shift, Shift). 
       This flag automatically activates logging on page load. --> 
      <client-debug-autologging>false</client-debug-autologging> 
     </flags> 
    </config> 

    <config evaluator="string-compare" condition="WebFramework"> 
     <web-framework> 
      <!-- Autowire Runtime Settings --> 
      <autowire> 
       <!-- 
        Developers can set mode to 'production' or 'development' (to disable; SpringSurf caches, 
        FreeMarker template caching and Rhino JavaScript compilation.) 
       --> 
       <mode>development</mode> 
      </autowire> 
     </web-framework> 
    </config> 
</alfresco-config> 
+0

Theo như tôi hiểu, đó là liên quan nhiều hơn đến sự phát triển webscripts phía máy chủ (đúng với tôi nếu tôi sai).Câu hỏi của tôi tập trung hơn vào các tài nguyên phụ của khách hàng như tiện ích JavaScript. Dù sao những gì bạn đã cung cấp là rất hữu ích và tôi sẽ kết hợp nó vào môi trường phát triển của tôi. Cảm ơn. –

+0

@ AlejandroGarcíaSeco: Ít nhất là đối với các phần nhỏ, phần phía máy khách cũng được đóng gói bên trong bình và sau đó có sẵn trên đường dẫn lớp. Đặt trình nạp lớp được chia sẻ vào thư mục nguồn của bạn sẽ xóa nhu cầu sao chép và đóng gói. Tôi không chắc chắn nếu phần thứ hai của câu trả lời của tôi là cần thiết trong trường hợp của bạn, nó có thể là nó cũng vô hiệu hóa một số bộ nhớ đệm của tài nguyên classpath. –

+0

Tôi đã thử đề xuất của bạn nhưng tiếc là không hoạt động đúng với tôi. Tôi đang có trường hợp ngoại lệ khi bối cảnh mùa xuân được khởi tạo theo một số bộ đánh giá tùy chỉnh, tôi đã cố gắng sắp xếp nó ra nhưng tôi không thể tìm thấy một giải pháp thẳng về phía trước. Tôi sẽ thử lại lần nữa vì tôi không thể dành nhiều thời gian hơn cho việc này ngay bây giờ. Cảm ơn rất nhiều. –

1

Tôi thường làm việc trên các phiên bản riêng tư để có thể tự mình chạy các ứng dụng đã phát nổ, vì vậy mọi thay đổi đều hiển thị ngay lập tức cho tôi. Tôi chỉ cần khởi động lại tomcat khi tôi thay đổi datamodel, triển khai một số mô-đun hoặc webscripts được hỗ trợ bởi java hoặc tương tự. Mặc dù một số trong số đó cũng có thể tải lại trực tiếp.

Các vấn đề liên quan