小编Mar*_*utt的帖子

如何使用滑动释放循环正确设置多模块Maven项目

我正在尝试以允许模块的不同发布周期的方式设置我们的多模块Apache Maven项目的最佳方法,并且在调试项目时不会引入依赖性问题.

我们目前的设置方式如下:

  • bigsystem@1.2
    • 父 - 1.1-SNAPSHOT
    • 模块a@1.4-SNAPSHOT
      • 由parent@1.1-SNAPSHOT提供资助
    • 模块b@1.3-SNAPSHOT
      • 由parent@1.1-SNAPSHOT提供资助
      • 取决于a@1.1
    • module c@1.1-SNAPSHOT
      • 由parent@1.1-SNAPSHOT提供资助
      • 取决于a@1.2
      • 取决于b@1.1

模块b和c中声明的依赖项包含编译模块所需的最低版本,该模块不一定是模块的当前版本,也不是所部署模块的版本.

从构建角度来看,这很有效,每个模块都可以根据需要发布/更新,但是当尝试调试已经打开顶级pom的IntelliJ IDEA(版本8和9 EAP)下部署的应用程序时,IDEA决定,因为我们声明了依赖于a@1.2,只要我们进入其中一个类,就应该从a-1.2-sources.jar而不是项目中当前的a@1.4源打开它.这进一步混淆了这样一个事实,即进入b的任何一个班级都需要我们b = 1.1而不是b@1.3.

我最初尝试解决这个问题是在父pom的dependencyManagement部分中声明版本号,并让子模块继承该版本.这有助于解决IDEA调试问题,因为dependencyManagement部分可以指向每个人当前的-SNAPSHOT版本.

不幸的是,由于必须在释放模块之前释放父pom,因此在执行maven释放时会出现问题,但由于父级可能引用多个开发中-SNAPSHOTS,因此无法释放它,我们最终会添加版本引用到模块pom以满足发布.

似乎使用maven的dependencyManagement部分只有在我们同时发布所有bundle时才会真正起作用,无论它们是否发生了变化,但是因为我们只想在需要时管理每个子模块的版本,这个模型不会似乎很合适.

我怀疑我遗漏了什么,并且dependencyManagement和版本范围的组合可能满足要求,尽管我还没有看到版本范围正常工作.

有没有更好的办法?一个正确的方法?

java maven-2 intellij-idea

12
推荐指数
1
解决办法
8269
查看次数

Java运行时不支持编码'UTF-8'

每当我在SUN Java(构建1.6.0_10-rc2-b32和其他1.6.x版本)下启动基于Apache Felix(OSGi)的应用程序时,我在控制台上看到以下消息输出(通常在Ubuntu 8.4下):

警告:Java运行时不支持编码'UTF-8'.

在运行Tomcat和Resin时,我偶尔也会看到此消息显示.如果java支持unicode和UTF-8,导致此消息的原因是什么?我还没有找到任何参考,或者在其他地方找到答案.

java linux unicode

11
推荐指数
2
解决办法
2万
查看次数

为什么Scala在分配给val时需要部分应用curried函数?

在Scala中,为什么curry函数可以很容易地直接传递给其他函数,但是当将它分配给一个函数时还val需要部分应用它_?例如,给定两个功能:

def curried(a: Int)(b: Int) = a + b
def test(a: Int, f: Int => Int) = f(a)
Run Code Online (Sandbox Code Playgroud)

我可以很容易地传递curriedtest:

test(5, curried(5))
Run Code Online (Sandbox Code Playgroud)

一切都很快乐.但是,如果我只是打电话给curried(5)我得到一个错误:

scala> curried(5)
<console>:9: error: missing arguments for method curried;
follow this method with `_' if you want to treat it as a partially applied function
              curried(5)
Run Code Online (Sandbox Code Playgroud)

但是,如果我将调用更改为包含类型信息,则可以:

val 'curried: Int => Int = curried(5)
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释不一致背后的理性,当然Scala编译器可以推断该函数是否Int => Int在原始方法上给出了类型定义?

scala currying

11
推荐指数
1
解决办法
1431
查看次数

应该将多模块项目何时拆分为单独的存储库树?

目前我们有一个标准的subversion存储库布局项目:

./trunk
./branches
./tags

然而,当我们沿着OSGi和模块化项目的道路前进时,我们最终得到了:

./trunk/bundle/main
./trunk/bundle/modulea
./trunk/bundle/moduleb ./tags/bundle/main-1.0.0
./tags/bundle/main-1.0.1
./tags/bundle/modulea -1.0.0

'build'仍然非常单一,因为它按顺序构建所有模块,但我开始怀疑是否应该将构建/存储库重构为更像:

./bundle/main/trunk
./bundle/main/tags/main-1.0.0
./bundle/main/tags/main-1.0.1
./bundle/modulea/trunk
./bundle/modulea/tags/modulea- 1.0.0

在这种模式中,我想象每个模块构建自己,并将其二进制文件存储在存储库(maven,ivy或subversion存储库本身的另一个路径)中.

一旦模块化,是否有关于项目布局的指导方针或"最佳实践"?

java svn osgi

6
推荐指数
2
解决办法
2302
查看次数

标签 统计

java ×3

currying ×1

intellij-idea ×1

linux ×1

maven-2 ×1

osgi ×1

scala ×1

svn ×1

unicode ×1