我正在将一个遗留jar项目转换为SBT,并且由于奇怪的原因而不易解决,这个项目里面有" javax/servlet/Servlet.class ".所以我需要以某种方式从package-bin生成的jar文件中排除这个类.我该如何做到这一点?我希望排除使用通配符(即javax.*).
该SBT组件插件看起来像它的功能,将做到这一点,但我担心的是依靠SBT装配意味着我的JAR项目将无法在船型多模块项目(即工作,如果我把它作为一个战争文件的依赖然后需要告诉war项目在依赖的jar项目而不是package-bin上运行程序集 - 但我可能在这里弄错了).
我需要定义一个自定义任务来计算主类的名称,然后运行它.我在考虑这样的事情
customTask {
mainClass = compute main class name based on env
runMain(mainClass, jvm-args, fork=true)
}
Run Code Online (Sandbox Code Playgroud)
然后在SBT我将能够运行
sbt>自定义任务
这可以在SBT 11.2中完成吗?
我需要以下设置.
我已经成功地向etc/jetty.xml 添加了额外的连接器,因此它现在使用端口8080和9090.我还添加了额外的处理程序,因此它现在从多个目录(dir1/webapp1和dir2/webapp2)中获取webaps.
我的问题是:jetty将每个处理程序找到的所有webapps部署到每个连接器(即每个端口),因此webapp1和webapp2都可以在端口8080和9090上访问.
我需要一种方法来确保handler1(处理dir1/webapp1)仅被指定为connector1(侦听端口8080),并且同样对于connector2仅在端口9090上拾取handler2(处理dir2/webapp2).
有没有办法实现这个?
我有一个依赖于jar项目的遗留战争项目,jar项目需要在类路径中添加一些非托管jar 进行编译.但这些罐子不应该包装在战争中.所以我的问题是如何从fullClasspath中删除这些条目.以下内容不起作用:
val excludeFilter = "(servlet-api.jar)|(gwt-dev.jar)|(gwt-user.jar)"
val filteredCP = cp.flatMap({ entry =>
val jar = entry.data.getName()
if (jar.matches(excludeFilter)) {
Nil
} else {
Seq(entry)
}
})
fullClasspath in Runtime = filteredCP
Run Code Online (Sandbox Code Playgroud)
我很确定必须有简单的方法来做到这一点,但到目前为止它已经让我望而却步.
编辑:根据Pablo的使用托管类路径而不是非托管类的消息我可以将问题改为:如何将本地jar添加到managedClasspath.我的罐子放在一个带有(非常)非标准布局的本地文件夹中:
lib/testng.jar
lib/gwt/2.3/gwt-user.jar
lib/jetty/servlet.jar
Run Code Online (Sandbox Code Playgroud)
所以基本上我正在寻找类似的东西:
libraryDependencies += "testng" % "provided->test"
libraryDependencies += "gwt" % "2.3" % "gwt-user" % "provided->compile"
libraryDependencies += "jetty" % "servlet" % "provided->default"
Run Code Online (Sandbox Code Playgroud)
允许我从我自己的本地lib文件夹中获取jar.
如果我定义以下通用事件处理程序
trait Handles[E <: Event] {
def handle(event: E)
}
Run Code Online (Sandbox Code Playgroud)
事件类型是这样的
trait Event {
}
class InventoryItemDeactivated(val id: UUID) extends Event;
class InventoryItemCreated(val id: UUID, val name: String) extends Event;
Run Code Online (Sandbox Code Playgroud)
那么我如何创建一个为每个事件实现事件处理程序的类?我试过了:
class InventoryListView extends Handles[InventoryItemCreated] with Handles[InventoryItemDeactivated] {
def handle(event: InventoryItemCreated) = {
}
def handle(event: InventoryItemDeactivated) = {
}
}
Run Code Online (Sandbox Code Playgroud)
但斯卡拉抱怨说,一个特质不能被遗传两次.
我发现这个答案暗示了一个解决方案,但它接缝需要多个类(每个处理程序一个).这是否真的是唯一的方法,或者是否有其他一些Scala构造我可以用来使单个类实现多个通用事件处理程序(即使用案例类,清单或其他一些奇特的构造)?
假设我有像x²或2x +3x²这样的函数,那么如何创建适合这些函数的SVG路径呢?
根据我对SVG和Bezier曲线的有限理解,我相信我正在寻找一种简单的技术来构造贝塞尔控制点,以确保结果图符合给定的函数.您可以安全地假设(如果您还没有猜到)我是图形编程的新手.我知道像gnuplot这样的框架可以执行这种类型的插值,但我正在寻找更多关于如何使用SVG和JavaScript手动完成的解释.
编辑:精确拟合并不是一个严格的要求,但结果图必须合理准确(出于教学目的).
我正在使用JRuby和Cucumber,正在寻找一种运行方式
jruby -S gem update --system
jruby -S gem install cucumber
Run Code Online (Sandbox Code Playgroud)
来自Java ScriptEngine.没有任何谷歌搜索让我解决这个问题.基本上我希望能够做这样的事情
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine jRubyEngine = manager.getEngineByName("jruby");
: // some unknown code here
jRubeEngine.eval("call gems install/update from inside JRuby")
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个?
在GWT中,通常使用如下接口加载i18n字符串:
public interface StatusMessage extends Messages {
String error(String username);
:
}
Run Code Online (Sandbox Code Playgroud)
然后从StatusMessage.property文件加载实际的字符串:
error=User: {0} does not have access to resource
Run Code Online (Sandbox Code Playgroud)
这是一个很好的解决方案,但是我的客户端对于将i18n字符串放在数据库中的要求是不可靠的,因此可以在运行时更改它们(尽管它不是要求它们实时更改).
一种解决方案是创建一个异步服务,它接受消息ID和用户区域设置并返回一个字符串.我已经实现了这个并且发现它非常难看(它引入了大量与服务器的额外通信,加上它使得属性占位符替换相当复杂).
所以我的问题是,我可以通过一些很好的方式实现一个自定义消息提供程序,它可以在一个大的空间(对于当前用户会话)加载来自后端的消息.如果它也可以挂钩到默认的GWT消息机制,那么我会非常高兴(即我可以创建一个类似于上面的接口并继续使用漂亮的{0},{1} ...属性替换格式).
我们也欢迎在GWT中提供干净的数据库驱动消息的其他建议.
在构建网站时,我经常使用Browsershots等工具来确保我的网页在不同的浏览器中看起来相当不错.然而,我开始抱怨在不同的便携式设备上运行的一堆移动浏览器.
我的问题是如何最好地进行移动跨浏览器测试?(不需要我安装大量不同的移动仿真器的答案将是首选).
在Bash中,我可以使用这种常见结构创建一个地图(哈希表)
hput() {
eval "$1""$2"='$3'
}
hget() {
eval echo '${'"$1$2"'#hash}'
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
hput capitals France Paris
hput capitals Spain Madrid
echo "$(hget capitals France)"
Run Code Online (Sandbox Code Playgroud)
但是,我如何最好地迭代地图中的条目?例如,在Java中我会这样做:
for (Map.Entry<String, String> entry : capitals.entrySet()) {
System.out.println("Country " + entry.getKey() + " capital " + entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)
是否有一种在Bash中完成类似事情的常用方法?
我使用WiX v3.6.1601.0中的刻录工具创建一个将下载我的项目依赖项(.NET 3.5)的引导程序.然而,最终结果是两个可执行文件(程序MSI和将下载依赖项的exe).由于我的许多客户接触不了解使用哪个可执行文件,我想通过只发送一个文件(即MSI)使其更简单.
这是否可以与Burn一起使用?如果可以的话,任何人都可以向我指出如何创建一个将引导其自身依赖关系的单个MSI的文档.
如果我有一个列表List [Any]就像这样
val list = List(List(1,1),2,List(3,List(5,8)))
然后我如何编写区分的匹配语句
或者在伪scala中
list match {
case x:"single non-list element" => // do something with single element x
case y:"where y is a list" => // do something with list y
}
Run Code Online (Sandbox Code Playgroud)
通常的head :: tails匹配不起作用,因为head可以是包含其他列表的Any类型.
scala ×5
java ×3
sbt ×3
bash ×1
bootstrapper ×1
graphics ×1
gwt ×1
hashtable ×1
installer ×1
iteration ×1
javascript ×1
jetty ×1
jruby ×1
map ×1
reification ×1
ruby ×1
svg ×1
testing ×1
type-erasure ×1
wix ×1