2017-05-01 10 views
1

sbt-xjcプラグインを使用してQTI XSD(特にthis one)からJAXB Javaクラスを作成するSBTプロジェクトがあります。私のXSDはMathMLに依存しており、期待通りにMathMLクラスとQTIクラスを作成します。私が現在使用している唯一のxjcフラグは-verbose -extensionです。私はMathMLの上の依存関係を持つ別のJAXBプロジェクトを持っており、その1はまた、MathMLのクラスを生成し、しかしSBTプロジェクトで生成されたソースパッケージディレクトリを除外

- 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 

は、ここに私のディレクトリツリーです。私は重複したクラスを取り除きたい。私はMathML JAXBプロジェクトを作成し、それを他の2つのプロジェクトへの依存として追加しました。 SBTに、MathMLクラスを含まないQTI autogen JARを作成するように指示するにはどうすればよいですか?

this answerと似たようなものを試しましたが、動作しません。 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)) 

私はこの作業を取得するには、以下のいずれかを受け入れるだろう:

  1. 設定のSBT-XJCをMathMLのクラスを生成しないように。
  2. MathMLクラスをコンパイルしないようにsbtを設定します。
  3. MathMLクラスをパッケージ化しないようにsbtを構成します。
+0

管理対象のソースを印刷しようとしましたか?それらには除外したいファイルが入っていますか? – marios

答えて

1

mappingsキーを使用して、jarの内容を定義します。参照:http://www.scala-sbt.org/0.13/docs/Howto-Package.htmlあなたのケースでは

は、あなたがbuild.sbtに以下の設定により、(瓶内org/w3_1998/math/mathmlで、彼らはすべての始まりを想定)のMathMLファイルを除外することができます(一部に読みにくく&)

mappings in (Compile, packageBin) ~= { _.filterNot { 
    case (filePath, pathInJar) => pathInJar.startsWith("org/w3_1998/math/mathml") 
}} 

以下、詳細を:

mappings in (Compile, packageBin) ~= { _.filterNot(_._2.startsWith("org/w3_1998/math/mathml")) } 
関連する問題