我正在使用ANT来管理多个项目.我有一个build-common.xml脚本,单个项目包含.有些项目是图书馆,有些是项目.对于这些节目,我想包括
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
Run Code Online (Sandbox Code Playgroud)
在<jar>
标签中.对于库,我想有一个空的jar标签,如下所示.
<target name="jar" depends="compile" description="generate a jar">
<mkdir dir="${build}/jar" />
<property name="jarfile" value="${jar}/${ant.project.name}.jar" />
<jar jarfile="${jarfile}" basedir="${classes}">
</jar>
</target>
Run Code Online (Sandbox Code Playgroud)
有没有办法只有在定义属性main.class时才能包含清单属性Main-Class?
谢谢!
想象一下,我有一个带有单个抽象方法的Tokenizer类.
trait Tokenizer {
def tokenize(sentence: String): List[String]
}
Run Code Online (Sandbox Code Playgroud)
我将实现一些提供实现的tokenizer.我希望每个Tokenizer都有一个main方法.我的第一个想法是编写这样的代码:
abstract class TokenizerMain(tokenizer: Tokenizer) {
def main(args: Array[String]) = println(tokenizer.tokenize(args(0)).mkString(" "))
}
class TokenizerOne(val model: String = "foo") extends Tokenizer {
def tokenize(sentence: String) = List("asdf")
}
object TokenizerOne extends TokenizerMain(new TokenizerOne) {
}
Run Code Online (Sandbox Code Playgroud)
但是,我得到错误"超级构造函数不能传递自引用,除非参数是通过名称声明的".我可以重命名object TokenizerOne
,object TokenizerOneMain
但我想保持它与class
.有一个更好的方法吗?
更新:此问题似乎是由model
TokenizerOne 的隐式构造函数参数引起的.
我知道Scalatra是一个轻量级框架.但是,我想知道是否有任何管理少量州的技巧.我有一个带有textarea和一些复选框的表单.例如,假设textarea包含一个数学方程式,并且复选框包含一些其他选项.当我提交(method = POST)时,我想在表单下方显示结果,但保持相同的选项(textarea中的相同文本,选中相同的复选框).
有没有一个很好的方法来实现这一目标?或者我是否需要在生成HTML时手动设置值?我现在正在使用Jade生成HTML.
我正在开发一个带有Lucene后端的网站.Lucene直接连接到索引文件,因此很难从索引机以外的机器开发网站.传统数据库具有运行的服务器,以在原始数据和应用程序之间提供中介.
我想在Lucene和我的Web应用程序之间创建这样的中介.首先想到的是,Akka似乎是正确的工具,我想我会使用Akka期货或键入演员来执行调用.但是,Akka Typed Actors页面警告:
"更多背景:TypedActors很容易被滥用为RPC,这是一个众所周知的漏洞.因此当我们谈论使高度可扩展的并发软件更易于编写时,TypedActors不是我们想到的他们有自己的利基,谨慎使用它们."
我认为重点是RPC促进了集中化,但我的计划是好的还是滥用Akka?
我发现在命令行上使用maven编译scala源的唯一方法mvn
是在scala-maven-plugin
.中显式添加执行.
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
<configuration>
<args>
<arg>-deprecation</arg>
<arg>-unchecked</arg>
</args>
<jvmArgs>
<jvmArg>-Xms128m</jvmArg>
<jvmArg>-Xmx1024m</jvmArg>
</jvmArgs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但是,Eclipse不喜欢这些执行并给出以下错误.
生命周期配置未涵盖插件执行:net.alchim31.maven:scala-maven-plugin:3.0.1:compile(执行:默认,阶段:编译)
生命周期配置未涵盖插件执行:net.alchim31.maven:scala-maven-plugin:3.0.1:testCompile(执行:默认,阶段:测试编译)
Eclipse建议永久地将目标标记为忽略,但这意味着我的pom中添加了许多丑陋的垃圾.我的意思是,XML已经很难看了.有没有更好的方法来配置我的项目来编译源mvn
?以下是Eclipse添加的内容.
<pluginManagement>
<plugins>
<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
<plugin>
<groupId>org.eclipse.m2e</groupId>
<artifactId>lifecycle-mapping</artifactId>
<version>1.0.0</version>
<configuration>
<lifecycleMappingMetadata>
<pluginExecutions>
<pluginExecution>
<pluginExecutionFilter>
<groupId>
net.alchim31.maven
</groupId>
<artifactId>
scala-maven-plugin
</artifactId>
<versionRange>
[3.0.1,)
</versionRange>
<goals>
<goal>testCompile</goal>
<goal>compile</goal>
</goals>
</pluginExecutionFilter>
<action> …
Run Code Online (Sandbox Code Playgroud) 有谁知道为什么这个BookmarkablePageLink
类在wicket中是通用的?我一直在创建新的BookmarkablePageLink<Object>(...)
只是为了避免编译器警告.
我应该选择不同的通用类型吗?简要的代码视图让我更加困惑,为什么它是通用的.
是否有可能在Eclipse中获取在匿名类(当前调试器所在的位置)之外声明的最终变量的值?例如:
final int x = 5;
new Object() {
{
System.out.println(x);
}
};
Run Code Online (Sandbox Code Playgroud)
这将编译并打印"5",但如果我尝试检查println行上的x,我会收到错误"x无法解析为变量".
通过查看Scala代码,可以通过添加apply
方法来实现方便的数组创建语法object Array
.起初,我认为这是通过案例类以某种方式实现的,因为您可以运行以下操作,但似乎并非如此:
Array(1,2,3) match { case Array(a, b, c) => a + b + c }
Run Code Online (Sandbox Code Playgroud)
我知道我还需要查看WrappedArray
和所有超类,但我无法弄清楚scala如何在Arrays上实现这种匹配(我需要更熟悉scala集合类层次结构).它肯定不适用于普通类.
scala> class A(val x: Int)
scala> new A(4) match { case A(x) => x }
<console>:9: error: not found: value A
new A(4) match { case A(x) => x }
^
<console>:9: error: not found: value x
new A(4) match { case A(x) => x }
Run Code Online (Sandbox Code Playgroud)
他们如何使用Array工作?
假设您正在编写一个规范化字符串的类.该类有许多配置标志.例如:
val makeLowerCase: Boolean = true
val removeVowels: Boolean = false
val dropFirstCharacter: Boolean = true
Run Code Online (Sandbox Code Playgroud)
如果我正在编写可变代码,我会为该normalize
方法编写以下内容.
def normalize(string: String) = {
var s = string
if (makeLowerCase) {
s = s.toLowerCase
}
if (removeVowels) {
s = s.replaceAll("[aeiou]", "")
}
if (dropFirstCharacter) {
s = s.drop(1)
}
s
}
Run Code Online (Sandbox Code Playgroud)
是否有一种干净简单的方法来编写这些没有变异的东西?嵌套条件变得非常讨厌.我可以创建一个String=>String
lambdas 列表,根据配置过滤它,然后通过它折叠字符串,但我希望有更容易的东西.