通常,Java不尊重Scala软件包private
访问修饰符。这意味着Bar
package foo.bar
private[bar] case class Bar(x: String)
可以从Foo
访问
package foo;
import foo.bar.Bar;
public class Foo {
public static Bar bar() {
return new Bar("bar");
}
}
我创建了一个具有以下结构的简单软件包:
.
├── build.sbt
├── project
│ └── build.properties
└── src
└── main
├── java
│ └── foo
│ └── Foo.java
└── scala
└── foo
└── bar
└── Bar.scala
build.sbt
如下所示:
scalaVersion := "2.12.10"
可以对其进行编译(sbt compile
和打包(sbt package
),并且可以从另一个项目中调用Foo.bar
。
但是在publish
/ publishLocal
上失败:
sbt publishLocal
[info] Loading project definition from /path/to/source/project
[info] Loading settings for project simpleapp from build.sbt ...
[info] Set current project to simpleapp (in build file:/path/to/)
[info] Main Scala API documentation to /path/to/source/target/scala-2.12/api...
[info] Wrote /path/to/source/target/scala-2.12/simpleapp_2.12-0.1.0-SNAPSHOT.pom
[error] /path/to/source/src/main/java/foo/Foo.java:6:17: not found: type Bar
[error] public static Bar bar() {
[error] ^
[info] No documentation generated with unsuccessful compiler run
[error] one error found
[error] (Compile / doc) Scaladoc generation failed
[error] Total time: 1 s, completed Dec 1, 2019, 12:30:30 AM
我想知道是否有人可以解释这种不一致之处,并且在这种情况下是否存在一些解决方法来制作publishLocal
。
如果相关,我使用:
我知道整件事都闻到了一英里远的气味,现在我完全可以了。