我正在尝试将ant
替换为scons
以构建Java文件并创建jar文件。
env.Java(target = 'classes', source = 'src')
将生成所有.class
文件,然后,当启动一个干净的构建(不进行任何更改)时,scons应该告诉我我的tartet已启动-迄今为止package-info.java
文件为空,所以scons
Java构建器未生成.class文件。副作用是每次启动构建时,scons告诉我他需要生成package-info.class
,然后,每次重新启动构建。永远不会认为目标是最新的。此问题has been asked很久以前。但是,该解决方案不再起作用,它试图做的是从目标中删除package-info.class:
tgts = env.Java(target = 'classes', source = 'src')
for f in tgts:
if f.path.endswith('package-info.class'):
tgts.remove(f)
jar = env.Jar(target = 'dds-interface.jar', source = tgts)
Default(jar)
这会产生错误
AttributeError: <class 'SCons.Node.FS.File'> object has no attribute 'upper':
File "C:\SVN\products\faa_mx\vs2017.install2\SConstruct", line 31:
sc_manager.build()
File "C:\SVN\products\faa_mx\vs2017.install2\cm\env\scons\utilities\sconscriptManager.py", line 43:
cache = SCons.Script.SConscript(str(script).strip(), exports='envService parentEnv vcxprojList', variant_dir=utils.createVariantDir(envService, script), duplicate=0)
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Script\SConscript.py", line 614:
return method(*args, **kw)
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Script\SConscript.py", line 551:
return _SConscript(self.fs, *files, **subst_kw)
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Script\SConscript.py", line 256:
call_stack[-1].globals)
File "C:\SVN\products\faa_mx\vs2017.install2\fwk\network\dds\simd\java\api\java_api.sc", line 51:
source = tgts)
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Environment.py", line 224:
return self.method(*nargs, **kwargs)
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Tool\jar.py", line 169:
target_classes.extend(file_to_class(s))
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Tool\jar.py", line 143:
if(str(_my_normcase(s)).endswith(java_suffix)):
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Node\FS.py", line 366:
return x.upper()
File "c:\python\python35\lib\site-packages\scons-3.0.1\SCons\Node\FS.py", line 632:
(self.__class__, attr))
根据我读到的文档,Jar只接受java文件或'classes'作为来源。
package-info.class
文件(类似于ant
)?package-info.java
文件而不会破坏所有内容?我认为文档对我们的项目不重要。我已经找到解决方法,我应该将-Xpkginfo:always
传递给scons JAVACFLAGS
。不幸的是,当我传递此参数时,我的javac版本(1.7.0_25)崩溃了。
最后,这很容易,javac
编译器有一个参数来强制生成package-info.class
。
只需将-Xpkginfo:always
传递给scons JAVACFLAGS
。不幸的是,当我传递此参数时,我的javac版本(1.7.0_25)崩溃了。 javac 1.8可以很好地使用此参数。