2012-01-24 14 views
8

Tengo problemas para compilar Scala con Maven o Eclipse donde trato de importar una clase desde un contenedor Java que contiene un espacio de nombres y una clase del mismo nombre.
Puedo compilar con scalac, sin embargo.El paquete contiene el objeto y el paquete con el mismo nombre

E.g. el proyecto Java (JAR) contiene:

src/foo/bar.java 

src/foo/bar/some_resource.txt 

-> foobar.jar 

Scala project references foobar.jar 

Foobartest.scala: 

import foo.bar 

class foobartest { 

} 

El compilador se queja con:

package foo contains object and package with same name: bar 
one of them needs to be removed from classpath 

El uso de Maven 3.0.03/Eclipse 3.7.1 con Scala 2.9.0.1 (y maven-scala-plugin).

El jar con el que tengo problemas es jenkins-core-1.399.jar - definitivamente contiene varias instancias donde hay un espacio de nombres y un objeto del mismo nombre.
Estoy intentando escribir un plugin de Jenkins en Scala (podría hacerlo en Java pero preferiría scala ya que todas nuestras bibliotecas están en scala), que depende de usar Maven -
https://wiki.jenkins-ci.org/display/JENKINS/Plugin+tutorial.

+0

¿Alguna vez recibió un plugin de Jenkins escrito en Scala? Estoy intentando lo mismo – KeepCalmAndCarryOn

+0

Sí, está en mi github. Traté de publicarlo, pero no obtuve un gran apoyo de la gente de Jenkins para ser honesto. https://github.com/Chemmo/scala_plugin – David

+0

Escribí uno también y lo publiqué, pero no se puede descargar desde el administrador de complementos https://github.com/jenkinsci/hello-world-scala-plugin – KeepCalmAndCarryOn

Respuesta

5

Ese tipo de limitación se perfiló en SI-4695: package object misbehaves in the presence of classfiles.

Como se sugiere en SI-2089 (naming restriction makes some jars unusable), se podría tratar de usar la "resolve-term-conflict", como se aplica en changeset 25145:

Se ha añadido una opción -Y para resolver las colisiones de espacio de nombres entre el paquete y el objeto.
Es un instrumento contundente: si las personas tienen muchos de estos conflictos que necesitan resolver de forma individualmente matizada, probablemente no tengan suerte.

val termConflict = ChoiceSetting  ("-Yresolve-term-conflict", "strategy", "Resolve term conflicts", 113 List("package", "object", "error"), "error") 

// Some jars (often, obfuscated ones) include a package and 
// object with the same name. Rather than render them unusable, 
// offer a setting to resolve the conflict one way or the other. 
// This was motivated by the desire to use YourKit probes, which 
// require `yjp.jar` at runtime. See SI-2089. 
4

La opción del compilador real es "-Yresolve plazo de los conflictos: estrategia" donde la estrategia es cada paquete, los objetos, el error.

Cuestiones relacionadas