Java 在SBT项目中排除生成的源程序包目录
我有一个SBT项目,它使用插件从QTI XSD(特别是)创建JAXB Java类。我的XSD依赖于MathML,它创建MathML类以及预期的QTI类。我当前使用的唯一xjc标志是Java 在SBT项目中排除生成的源程序包目录,java,scala,jaxb,sbt,xjc,Java,Scala,Jaxb,Sbt,Xjc,我有一个SBT项目,它使用插件从QTI XSD(特别是)创建JAXB Java类。我的XSD依赖于MathML,它创建MathML类以及预期的QTI类。我当前使用的唯一xjc标志是-verbose-extension 这是我的目录树: - src/main/resources/imsqti_v2p1.xsd - target - classes/org - imsglobal/... - Contains QTI .class files - w3_1998/math/mat
-verbose-extension
这是我的目录树:
- src/main/resources/imsqti_v2p1.xsd
- target
- classes/org
- imsglobal/... - Contains QTI .class files
- w3_1998/math/mathml/... - Contains MathML .class files
- src_managed/main/org
- imsglobal/... - Contains generated QTI .java files
- w3/_1998/math/mathml/... - Contains MathML .java files
然而,我有另一个JAXB项目,它依赖于MathML,并且还生成MathML类。我想去掉重复的类。我创建了一个MathML JAXB项目,并将其作为依赖项添加到其他两个项目中。如何告诉SBT创建不包含MathML类的QTI autogen JAR
我试过类似的方法,但不起作用。MathML类仍然包含在JAR中。以下是我添加到build.sbt中的尝试:
val mathmlPath = "org/w3/_1998/math/mathml"
def isInPath(path: String, file: File) = file.getCanonicalPath.startsWith(mathmlPath)
(managedSources in Compile) := managedSources.value.filterNot(file => isInPath(mathmlPath,file))
我将接受以下任何一项以使其正常工作:
您可以使用
mappings
键定义jar的内容。见:
在您的情况下,可以通过build.sbt
中的以下设置排除MathML文件(假设它们都以jar中的org/w3_1998/math/MathML
开头):
mappings in (Compile, packageBin) ~= { _.filterNot {
case (filePath, pathInJar) => pathInJar.startsWith("org/w3_1998/math/mathml")
}}
或不太详细(对某些人来说可读性较差)(&T):
您是否尝试打印您的托管源?它们是否包含要排除的文件?
mappings in (Compile, packageBin) ~= { _.filterNot(_._2.startsWith("org/w3_1998/math/mathml")) }