Java 在SBT项目中排除生成的源程序包目录

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

我有一个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/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))
我将接受以下任何一项以使其正常工作:

  • 将sbt xjc配置为不生成MathML类
  • 将sbt配置为不编译MathML类
  • 将sbt配置为不打包MathML类

  • 您可以使用
    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")) }