我目前正在提取war文件的内容,然后将一些新文件添加到目录结构,然后创建一个新的war文件.
这一切都是以编程方式从Java完成的 - 但是我想知道复制war文件然后只是附加文件会不会更有效 - 那么我就不必等待战争扩展然后必须再次压缩.
我似乎无法在文档或任何在线示例中找到这样做的方法.
任何人都可以提供一些提示或指示?
更新:
其中一个答案中提到的TrueZip似乎是一个非常好的java库附加到一个zip文件(尽管其他答案说它不可能这样做).
任何人都有关于TrueZip的经验或反馈,或者可以推荐其他类似的图书馆?
我正在使用Scala IDE 2.0.1和SBT 0.11.2从Akka 2.0.1开始.我的build.sbt看起来像这样:
name := "akka"
version := "0.1"
scalaVersion := "2.9.2"
resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"
libraryDependencies += "com.typesafe.akka" % "akka-actor" % "2.0.1"
Run Code Online (Sandbox Code Playgroud)
如你所见,没有什么了不起的.
现在,我如何告诉Eclipse将工件与源分类器一起用于akka-actor库?
在SBT中,我可以使用update-classifiers将源代码和Javadocs下载到Ivy存储库,但即使我在从sbteclipse插件运行eclipse命令之前执行此操作,Eclipse仍然不知道源代码.当然,我可以手动执行此操作,但这对于更多库来说不能很好地扩展.
我还尝试将IvyDE插件与deliver-local命令一起使用.虽然这集成了依赖关系管理,但它似乎对源代码没有帮助.
有线索吗?
编辑:这是从deliver-local生成的ivy.xml:
<?xml version="1.0" encoding="UTF-8"?>
<ivy-module version="2.0" xmlns:e="http://ant.apache.org/ivy/extra">
<info organisation="default" module="akka_2.9.2" revision="0.1" status="release" publication="20120506225613">
<description>
akka
</description>
</info>
<configurations>
<conf name="compile" visibility="public" description=""/>
<conf name="runtime" visibility="public" description="" extends="compile"/>
<conf name="test" visibility="public" description="" extends="runtime"/>
<conf name="provided" visibility="public" description=""/>
<conf name="optional" visibility="public" description=""/>
<conf name="sources" visibility="public" description=""/>
<conf name="docs" visibility="public" …Run Code Online (Sandbox Code Playgroud) 我可能只是在寻找错误的方向,但我发现注释处理的JSE文档非常稀疏.我想编写一个注释处理器,它处理带注释的String字段和局部变量,用计算的String表达式替换它们.这不应该太复杂,但我在Javadoc for javax.annotation.processing中迷失了.
编辑:我需要在编译时处理注释,因为我想修改生成的代码.它应该用计算的String表达式替换带注释的常量String表达式.
对不起,这个引人注目的标题.;-)
我想在Scala中使用package-private方法创建一个包私有类,所以我的类看起来像这样:
package net.java.truevfs.ext.pace
import ...
private[pace] abstract class AspectController(controller: FsController)
extends FsDecoratingController(controller) {
private[pace] def apply[V](operation: => V): V
... // lots of other stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用javap来检查Scala编译器有效创建的内容,我会得到这样的结果:
$ javap -classpath target/classes net.java.truevfs.ext.pace.AspectController
Compiled from "AspectController.scala"
public abstract class net.java.truevfs.ext.pace.AspectController extends net.java.truevfs.kernel.spec.FsDecoratingController implements scala.ScalaObject{
public abstract java.lang.Object apply(scala.Function0);
...
}
Run Code Online (Sandbox Code Playgroud)
这意味着尽管Scala编译器可能会尊重访问限制,但我仍然可以从任何Java代码中调用此类,这是一种明显的封装违规.
我错过了什么吗?有没有办法使这项工作按预期进行?
我有一个多模块Maven构建,我想在我的根模块中生成一个聚合的Scaladoc,类似于maven-javadoc-plugin的聚合目标.我的第一次尝试是:
<project ...>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<configuration>
<reportPlugins>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<reports>
<report>doc</report>
</reports>
<configuration>
<aggregateDirectOnly>false</aggregateDirectOnly>
<sendJavaToScalac>false</sendJavaToScalac>
</configuration>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<reports>
<report>aggregate</report>
</reports>
</plugin>
</reportPlugins>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
但是,aggregateDirectOnly属性似乎没有任何效果.我总是只为个别罐型POM获得Scaladoc.
我也尝试将forceAggregate设置为true,但它也没有效果.
这该怎么做?
我有一个关于有限排列集的代数群的用例.因为我想将这个组用于各种不相关的排列类,我想把它作为一个混合特性来做.这是我尝试的摘录
trait Permutation[P <: Permutation[P]] { this: P =>
def +(that: P): P
//final override def equals(that: Any) = ...
//final override lazy val hashCode = ...
// Lots of other stuff
}
object Permutation {
trait Sum[P <: Permutation[P]] extends Permutation[P] { this: P =>
val perm1, perm2: P
// Lots of other stuff
}
private object Sum {
def unapply[P <: Permutation[P]](s: Sum[P]): Some[(P, P)] = Some(s.perm1, s.perm2)
//def unapply(s: Sum[_ <: Permutation[_]]): Some[(Permutation[_], Permutation[_])] = Some(s.perm1, s.perm2) …Run Code Online (Sandbox Code Playgroud) 我需要在应用程序中维护一个对于集群环境中的所有用户和所有节点都是唯一的简单计数器.我想过如下使用单例会话bean注释javax.ejb.Singleton:
package foo;
import javax.ejb.Singleton;
@Singleton
public class Bean {
private int counter;
[...]
}
Run Code Online (Sandbox Code Playgroud)
这看起来很简单,但如果在集群环境中按预期工作,我找不到答案.群集的每个节点都有自己的实例吗?
当然我可以将bean保存在数据库中,但它实际上只是一个计数器,这样做会有点过分.此外,我希望计数器在应用程序崩溃或重新启动时重置,因此持久存在会产生比解决的问题更多的问题.
我正在尝试使用scala-maven-plugin 3.0.2(Scala Version 2.9.2)为我的代码生成Scaladoc.我用的时候
mvn scala:doc
Run Code Online (Sandbox Code Playgroud)
然后我没有得到我的Scala代码的私有类型和元素的文档.我检查了插件文档,但我找不到一个选项.
奇怪的是,scaladoc插件确实为我的Java代码的私有元素生成了文档.但是因为它没有生成Java代码的HTML注释的文档,所以这是无用的.
我错过了什么吗?
我想测试一个ThreadLocal是否已经初始化而没有实际初始化它.当然,代码需要是线程安全的.理想情况下我想要这样的东西:
class TestableThreadLocal<T> extends ThreadLocal<T> {
public boolean isInitialized() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是我该如何实现这种方法呢?
编辑:动机:我有一个子类ThreadLocal来覆盖initialValue().但是,我并不总是需要初始化,特别是因为它可能会导致多类加载器环境中的内存泄漏.一个简单的测试可以帮助我编写代码以避免意外初始化.
我正在将宏从 Scala 2 移植到 Scala 3。作为其工作的一部分,Scala 2 宏使用默认构造函数创建泛型类型的实例。在 Scala 2 中使用准引用很容易做到这一点,但我在 Scala 3 宏上遇到了困难。这是迄今为止我最好的方法:
import scala.quoted.*
inline def make[A <: AnyRef]: A = ${ makeThat[A] }
private def makeThat[A <: AnyRef : Type](using Quotes): Expr[A] =
import quotes.reflect.*
'{ new A().asInstanceOf[A] }
Run Code Online (Sandbox Code Playgroud)
如果没有.asInstanceOf[A],编译器会发出错误消息:
[error] -- [E007] Type Mismatch Error: ...
[error] 17 | '{ new A() }
[error] | ^^^^^^^
[error] |Found: Object
[error] |Required: A
[error] |
[error] |where: A is a type in method makeThat with …Run Code Online (Sandbox Code Playgroud)