当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪sbt 里面使用多个项目 Muti-Project      本文介绍了怎样在一个 build里面构建多个项目。 在阅读本文之前,首先请读一下前面的开始指南,尤其是需要了解一下 build.sbt 和 .scala build definition。 Mutiple projects 它可以在一个 build 里面构.........
    ▪使用Visual Studio进行远程调试      关键字   远程调试器  Windows凭证  pdb符号文件  进程调试(远程调试) 过程   准备应用程序     在客户机A上使用C#编写ConsoleApplication工程并生成,然后将生成的ConsoleA.........
    ▪使用Doxygen+graphviz+Sublime2来看代码      这篇文章主要为那些不愿意学VIM或没买sourceinsight的人准备的,因为其实上述的两个工具已经能够很好的帮助我们看代码了。楼主之所以没有使用上述工具,一是觉得VIM的配色略丑,也不太熟.........

[1]sbt 里面使用多个项目 Muti-Project
    来源: 互联网  发布时间: 2013-11-19

本文介绍了怎样在一个 build里面构建多个项目。

在阅读本文之前,首先请读一下前面的开始指南,尤其是需要了解一下 build.sbt 和 .scala build definition。

Mutiple projects

它可以在一个 build 里面构建多个相关的项目,如果它们互相依赖并且你想在一起编辑它们,那就在好不过了。

build 里的每一个 sub-project 都有它自己的 src/main/scala,当你运行 package的时候会生成自己的 jar 文件,就像其它项目一样。

在 .scala 文件里定义项目

为了使用 multiple project ,你必须在一个.scala 文件里声明每一个项目并且描述它们之间的联系。这在 .sbt文件里是无法做到的。不管怎样,你可以在 .sbt文件里为每一个项目定义配置,下面是一个 定义了一个根工程 hello 的.scala文件的例子,这个根项目一共有两个 sub-projects,hello-foo 和 hello-bar:

import sbt._
import Keys._
object HelloBuild extends Build {
    lazy val root = Project(id = "hello",
                            base = file(".")) aggregate(foo, bar)
    lazy val foo = Project(id = "hello-foo",
                           base = file("foo"))
    lazy val bar = Project(id = "hello-bar",
                           base = file("bar"))
}

sbt使用反射技术来找到 Project 对象的列表的,进而在 Build 对象里寻找 Project 字段。

因为 hello-foo 对象通过 base = file("foo") 来定义,所以它包含一个 foo 的子路径。它的源文件可以在 foo 下面的路径里找到,比如 foo/Foo.scala,或者 /foo/src/main/scala。通过 build 定义文件可以看出,在 foo 下面有 sbt 默认目录结构。

foo 里面的所有的 .sbt 文件,也就是 foo/build.sbt ,将会并入到整个构建的构建定义里,但是不会在 hello-foo 工程里。

如果你的整个工程都在 hello 里,尝试着在 hello/build.sbt ,hello/foo/build.sbt 以及 hello/bar/build.sbt 里面定一个不同的版本(version :="0.6")。然后在sbt 控制台键入 show version。你会得到像这样的结果(取决与你定义的版本):

> show version
[info] hello-foo/*:version
[info]  0.7
[info] hello-bar/*:version
[info]  0.9
[info] hello/*:version
[info]  0.5

hello-foo/ 的版本定义在 hello/foo/build.sbt 里面,hello-bar/ 的版本定义在 hello/bar/build/sbt 里面,hello/ 的版本定义在 hello/build.sbt 里面。记住每个语法的范围的 keys(Scopes.html)。每个 version key 对应着项目的一个基于 build.sbt 的范围。但是所有的 build.sbt 都是 build 定义的一部分。

每一个工程的设置都可以在 工程的根目录里面的 sbt 文件里进行配置,就像上面的例子那样,使用 .scala 文件同样也会很简洁的列出了项目以及基本的目录,但是没有必要把配置都放到 .scala 文件里面。

你可能会觉的把一切东西包括配置都放在 .scala 文件里很干净,因为保持了所有的构建定义仅用了一个 project 路径就完成了。好吧,一切随你。

不能在 sub-projects 里面在加一个 project 子路径,那样的话 foo/project/Build.scala 会被忽略的。

集成

如果你愿意,项目的构建和另一个完全相互独立。

在上面的例子里,你可能注意到了 aggregate(foo,bar) 方法。它把 hello-foo 和 hello-bar 都放在了根路径下。

集成意味着在一个集成的工程里面运行任务的同时运行这个集成的工程。这个例子里我们用 sbt 启动两个子项目,并尝试编译。你将会看到三个项目都被编译了。

在根项目 hello 里在集成项目,你可以控制每一个任务。

aggregate in update := false

aggregate in update 是描述更新任务的范围的全局量,见 scopes。

注意:在没有定义顺序的情况下,项目会按照字母排列顺序运行。

Classpath 依赖

一个项目可能会依赖其它的项目。调用 dependsOn 方法来实现。例如,如果 hello-foo 需要使用 classpath里面有 hello-bar 的类,你可以在你的 Build.scala 里面这样写。

lazy val foo = Project(id = "hello-foo",
                       base = file("foo")) dependsOn(bar)

现在 hello-foo 可以使用 hello-bar 里面的类了。它还会在编译它们的时候创建一个顺序:hello-bar 必须在hello-foo 编译之前更新编译。

为了更方便的使用于mutiple projects,在dependsOn 里面可以使用多个参数,如 dependsOn(bar,baz)。

依赖里面classpath的每一个配置

foo dependsOn(bar) 意味着 foo 里面的 Compile 配置依赖于bar 里面的 Compile 配置。 你也可以这样写 dependsOn(bar % "compile->compile")。

compile->compile 里面的 -> 意味着依赖于,所以 test->compile 意味着 Test 里面的 foo 配依赖于 bar 里面的编译配置。

省略的 ->config 部分意味着 ->compile, 因此 dependsOn(bar % "test") 意味着foo 里面的 Test 配置bar 里面的 Compile 配置。

一个有用的写法是 test->test,意味着 Test 依赖于 Test。比如,它允许你在 bar/src/test/scala 里面测试代码,接着又在 foo/src/test/scala 里面测试。

在sbt 控制台提示符下输入 projects 来列出有的工程,输入 project 来选择一个做为当前的工程。当你运行像 compile

你可以在一个依赖里面使用多个配置,使用分号分隔。例如, dependsOn(bar % "test->test;compile->compile").

Navaigating 项目的集成

在 sbt 控制台输入 project 来列出你所有的项目,project 来选择一个当前使用的项目。当你使用类似 compile 的命令时,是在当前项目里执行的。所以你不必编译根项目,你只需要在一个子项目里 compile。

共享设置

当在不同的项目里面使用一个 .scala 配置文件时,在不同的项目中间重用配置是很方便的。但是即使是使用不同的 buid.sbt 配置文件,在 main build 里面使用共享的配置依然很方便,只需要对相应的配置使用 ThisBuild 来把它应用的全局范围。例如,当 main 项目依赖于一个子项目时,为了这两个项目使用同一个版本的Scala 来编译。可以在 build.sbt 文件里面这样写一次:

scalaVersion in ThisBuild := "2.10.0"

把 2.20.0 替换成相应的 Scala 版本。这个设置会在所有的子项目里面生效。也可以在 “page on scope ”Thisbuild 处获得更多信息。

继续学习自定义配置。

作者:wfdztl521 发表于2013-4-22 16:47:11 原文链接
阅读:50 评论:0 查看评论

    
[2]使用Visual Studio进行远程调试
    来源: 互联网  发布时间: 2013-11-19
关键字
  •   远程调试器
  •   Windows凭证
  •   pdb符号文件
  •   进程调试(远程调试)
过程   准备应用程序     在客户机A上使用C#编写ConsoleApplication工程并生成,然后将生成的ConsoleApplication.exe拷贝至服务器S运行,并将此工程拷贝至客户机B上
  准备调试器
  •     将“安装路径 \Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger”拷贝至服务器S上运行
  •     在客户机B上使用“telnet 服务器地址 4016”确定与服务器S的“远程调试器”的连接畅通
  在客户机B上添加服务器S的windows凭证     打开Windows的“控制面板/凭证管理器”,添加一个“windows凭证”,需要输入服务器的地址、用户名与密码
  在客户机B上使用VS进行调试
  •     点击菜单“调试/附加到进程...”后,将服务器的IP或主机名填写至“限定符”文本框后回车,在下面的列表框中选择“ConsoleApplication.exe”后点击“附加”
  •     点击菜单“调试/窗口/模块”,右击ConsoleApplication.exe模块选择“符号设置...”,并在弹出来的对话框中将pdb文件所在的目录加入进入后点击确定,然后再点击模块选择“加载符号”
  •     打开“*.cs”源代码文件(不需要打开整个工程)后下断点调试
建议   在“符号对话框”中为应用程序设置符号文件目录后,再在同一机上使用VS打开工程,可能会弹出“启用了优化或没有调试信息”之类的信息而发现无法断点调试了,此时进入符号对话框中将符号目录移除,并点击“指定排除的模块”在弹出的对话框中移除相应的应用程序即可
作者:iaki2008 发表于2013-4-22 16:09:38 原文链接
阅读:61 评论:0 查看评论

    
[3]使用Doxygen+graphviz+Sublime2来看代码
    来源: 互联网  发布时间: 2013-11-19

这篇文章主要为那些不愿意学VIM或没买sourceinsight的人准备的,因为其实上述的两个工具已经能够很好的帮助我们看代码了。楼主之所以没有使用上述工具,一是觉得VIM的配色略丑,也不太熟练;二是目前Team没有SI的KEY,所以就找其他方法了,闲着也是闲着。好了,废话少说,进入正题,先给出效果图:


--doxygen 




--sublime2



这样我们就可以使用Doxygen查看代码,通过Graphviz产生函数调用图来看调用关系。可能有人会问,Sublime和vi有什么区别,为什么还需要使用它,原因主要有两个,一是搜索文件非常迅速,支持函数定位,变量定位,文件定位,速度很快,弥补了Doxygen找变量文件费力的问题;二是写代码确实很方便,可以安装各种插件。


安装方法:

1 下载Doxygen,去官网

2 下载Graphviz,去官网

3 下载Sublime text 2 ,去官网。。


使用:

1 Doxygen & Graphviz

打开Doxygen Wizard,会有配置面板,主要有向导和专家两种配置方式,建议在专家方式中选择自己需要的方式,


PROJECT标签:主要填写的是Doxygen的大的工作目录,本次项目的名字,输出目录,


BUILD标签:除了默认的,再勾选这些


sourcebrowser: 我需要查看代码,所以勾选Inline sources和souce Browser

Dot: 这里可以勾选CLASS_DIAGRAMS/HAVE_DOT/CALL_GRAPH/CALLER_GRAPH/DOT_PATH



然后就可以点RUN标签,运行后,会生成HTML,查看INDEX.HTML既可以看到结果。

可能会有些童鞋遇到无法生成或失败,检查dot文件能否运行,有的XP没有装.NET FRAMWORK2 会出问题


2 Sublime 2

sublime 的项目管理很简单,只要打开某个文件夹,在project中保存就可以了

我在使用的时候,装了几个插件:Alignment, Bracket Highlight, ctags .sublimecodeintel, sublimelinter, Themr

插件的具体使用方法就不多介绍了,网上搜搜一大堆。。

主要使用的快捷键: 

ctrl+p(快速定位项目中的文件)  



加上# 和 @ 分别为变量和函数,其实搜变量也能搜到函数。



如果装了CTAGS,那么还可以使用快速找到函数的定义,或者变量等等



总而言之,这是一个适合长久使用的工作方法,查看代码与编写代码。

不过Doxygen的缺点也是很明显的,对于大型工程,会遇到Crush或者速度非常慢(- -|)。但是呢,有利有弊是肯定的,只要用好了,习惯了就行。

作者:CAZICAQUW 发表于2013-4-22 20:06:53 原文链接
阅读:0 评论:0 查看评论

    
最新技术文章:
▪主-主数据库系统架构    ▪java.lang.UnsupportedClassVersionError: Bad version number i...    ▪eclipse项目出现红色叉叉解决方案
▪Play!framework 项目部署到Tomcat    ▪dedecms如何做中英文网站?    ▪Spring Batch Framework– introduction chapter(上)
▪第三章 AOP 基于@AspectJ的AOP    ▪基于插件的服务集成方式    ▪Online Coding开发模式 (通过在线配置实现一个表...
▪观察者模式(Observer)    ▪工厂模式 - 程序实现(java)    ▪几种web并行化编程实现
▪机器学习理论与实战(二)决策树    ▪Hibernate(四)——全面解析一对多关联映射    ▪我所理解的设计模式(C++实现)——解释器模...
▪利用规则引擎打造轻量级的面向服务编程模式...    ▪google blink的设计计划: Out-of-Progress iframes    ▪FS SIP呼叫的消息线程和状态机线程
▪XML FREESWITCH APPLICATION 实现    ▪Drupal 实战    ▪Blink: Chromium的新渲染引擎
▪(十四)桥接模式详解(都市异能版)    ▪你不知道的Eclipse用法:使用Allocation tracker跟...    ▪Linux内核-进程
▪你不知道的Eclipse用法:使用Metrics 测量复杂度    ▪IT行业为什么没有进度    ▪Exchange Server 2010/2013三种不同的故障转移
▪第二章 IoC Spring自动扫描和管理Bean    ▪CMMI简介    ▪目标检测(Object Detection)原理与实现(六)
▪值班总结(1)——探讨sql语句的执行机制    ▪第二章 IoC Annotation注入    ▪CentOS 6.4下安装Vagrant
▪Java NIO框架Netty1简单发送接受    ▪漫画研发之八:会吃的孩子有奶吃    ▪比较ASP和ASP.NET
▪SPRING中的CONTEXTLOADERLISTENER    ▪在Nginx下对网站进行密码保护    ▪Hibernate从入门到精通(五)一对一单向关联映...
▪.NET领域驱动设计—初尝(三:穿过迷雾走向光...    ▪linux下的块设备驱动(一)    ▪Modem项目工作总结
▪工作流--JBPM简介及开发环境搭建    ▪工作流--JBPM核心服务及表结构    ▪Eclipse:使用JDepend 进行依赖项检查
▪windows下用putty上传文件到远程Linux方法    ▪iBatis和Hibernate的5点区别    ▪基于学习的Indexing算法
▪设计模式11---设计模式之中介者模式(Mediator...    ▪带你走进EJB--JMS编程模型    ▪从抽象谈起(二):观察者模式与回调
▪设计模式09---设计模式之生成器模式(Builder)也...    ▪svn_resin_持续优化中    ▪Bitmap recycle方法与制作Bitmap的内存缓存
▪Hibernate从入门到精通(四)基本映射    ▪设计模式10---设计模式之原型模式(Prototype)    ▪Dreamer 3.0 支持json、xml、文件上传
▪Eclipse:使用PMD预先检测错误    ▪Jspx.net Framework 5.1 发布    ▪从抽象谈起(一):工厂模式与策略模式
▪Eclipse:使用CheckStyle实施编码标准    ▪【论文阅读】《Chain Replication for Supporting High T...    ▪Struts2 Path_路径问题
▪spring 配置文件详解    ▪Struts2第一个工程helloStruts极其基本配置    ▪Python学习入门基础教程(learning Python)--2 Python简...
▪maven springmvc环境配置    ▪基于SCRUM的金融软件开发项目    ▪software quality assurance 常见问题收录
▪Redis集群明细文档    ▪Dreamer 框架 比Struts2 更加灵活    ▪Maven POM入门
▪git 分支篇-----不断更新中    ▪Oracle非主键自增长    ▪php设计模式——UML类图
▪Matlab,Visio等生成的图片的字体嵌入问题解决...    ▪用Darwin和live555实现的直播框架    ▪学习ORM框架—hibernate(二):由hibernate接口谈...
▪(十)装饰器模式详解(与IO不解的情缘)    ▪无锁编程:最简单例子    ▪【虚拟化实战】网络设计之四Teaming
▪OSGi:生命周期层    ▪Javascript/Jquery——简单定时器    ▪java代码 发送GET、POST请求
▪Entity Framework底层操作封装(3)    ▪HttpClient 发送GET、POST请求    ▪使用spring框架,应用启动时,加载数据
▪Linux下Apache网站目录读写权限的设置    ▪单键模式的C++描述    ▪学习ORM框架—hibernate(一):初识hibernate
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3