Я упаковываю банки из сгенерированного исходного кода с помощью sbt-плагина, и банки в порядке и находятся в пути к классам.
Теперь у меня есть два одинаковых минимальных проекта, ориентированных на Scala 2.13 и 3.3. С 2.13 я могу запустить sbt clean Test/compile
, но с 3.3 выдает такую ошибку:
Could not find null in Some(.../test-project-3/lib/molecule-test-project-3.jar)
-- [E006] Not Found Error: .../test-project-3/src/test/scala/app/Connection.scala:14:23
14 | val schema: Schema = PersonSchema
| ^^^^^^^^^^^^
| Not found: PersonSchema
Я clean
хочу убедиться, что тестовый код получает код только из сгенерированных jar-файлов (что отлично работает с версией 2.13).
Тогда я подумал, что это может быть связано с какими-то двоичными проблемами, и поэтому попробовал запустить JDK версий 8, 11 и 20, но это не имело значения.
Следующие команды компилируют два проекта (и последний завершается с ошибкой):
git clone https://github.com/scalamolecule/sbt-molecule.git
cd sbt-molecule/test-project-2
sbt clean compile -Dmolecule=true
sbt clean Test/compile
cd ../test-project-3
sbt clean compile -Dmolecule=true
sbt clean Test/compile
(флаг -Dmolecule=true
заставляет плагин генерировать jar-файлы)
Благодарен за любые идеи о том, о чем это может быть!
Файл сборки для версии 3.3:
name := "sbt-molecule-test-project"
version := "1.8.1-SNAPSHOT"
organization := "org.scalamolecule"
scalaVersion := "3.3.3"
libraryDependencies ++= Seq(
"com.lihaoyi" %% "utest" % "0.8.3",
"org.scalamolecule" %% "molecule-sql-h2" % "0.9.0",
)
testFrameworks += new TestFramework("utest.runner.Framework")
Test / parallelExecution := false
// Molecule
enablePlugins(MoleculePlugin)
// Generate Molecule boilerplate code with `sbt clean compile -Dmolecule=true`
moleculePluginActive := sys.props.get("molecule").contains("true")
// tells plugin where to look for definitions of code to be generated
moleculeDataModelPaths := Seq("app")
// Doesn't make a difference
//Test / fork := true
Конечно, хотя показывать особо нечего..
Является ли Connection.scala
сгенерированным файлом? Где должен быть определен PersonSchema
? Вы открывали файл JAR, чтобы посмотреть, что в нем?
Connection
— это тестовый файл, PersonSchema
генерируется и присутствует в банке. Таким образом, банка и сам процесс генерации кажутся в порядке. Проблема возникает, когда сгенерированные исходные файлы очищаются и sbt компилирует тестовый код, а затем не находит (или не может использовать) jar.
Сгенерированный jar-файл для файлов классов не содержит новых .tasty
файлов Scala 3.
Я отфильтровал файлы классов для включения в jar по расширению имени файла «.class» и пропустил добавление «.tasty» для Scala 3. После добавления все работает как часы.
Поэтому я пропустил тот факт, что банки на самом деле были не в порядке.
Не могли бы вы поделиться соответствующей частью файла
build.sbt
?