我正在使用Java自动构建gradle。我在从ProcessBuilder创建的流程中执行“ gradlew.bat”。这是代码:
gradlewProcessBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
现在此代码可以完美运行,但是它通过应用程序控制台输出gradle控制台,我不希望这样。如果我删除此行:
template<class T, std::size_t I, std::size_t...Offs, class Tup>
T create( std::index_sequence<Offs...>, Tup&& tup ) {
return T( std::get<I+Offs>(std::forward<Tup>(tup))... );
}
template <unsigned N>
struct Pixel {
float color[N];
template<class...Ts,
std::enable_if_t< sizeof...(Ts)==N, bool > = true
>
Pixel(Ts&&...ts):color{ std::forward<Ts>(ts)... } {};
};
template <unsigned N>
struct PixelContainer {
std::vector<Pixel<N>> container;
template<class T0, class...Ts,
std::enable_if_t<!std::is_same<std::decay_t<T0>, PixelContainer>{}, bool> =true
>
PixelContainer(T0&& t0, Ts&&...ts):
PixelContainer( std::make_index_sequence<(1+sizeof...(Ts))/N>{}, std::forward_as_tuple( std::forward<T0>(t0), std::forward<Ts>(ts)... ) )
{}
PixelContainer() = default;
private:
template<class...Ts, std::size_t...Is>
PixelContainer( std::index_sequence<Is...>, std::tuple<Ts&&...>&& ts ):
container{ create<Pixel<N>, Is*N>( std::make_index_sequence<N>{}, std::move(ts) )... }
{}
};
该进程无限期地挂在 waitFor()中。
我绝对不知道redirectOutput如何在此方面产生效果,欢迎您提出的建议。
答案 0 :(得分:0)
如果未重定向或处理输出,则会分配默认的输出缓冲区。但是,在Windows上,输出缓冲区很小。当它填满时,该应用程序将停止执行并阻塞,直到耗尽输出缓冲区为止。
因此,您需要以某种方式消耗输出;通过使用INHERIT或具有使输出排水的线程。我建议使用https://github.com/zeroturnaround/zt-exec,因为它的默认处理要好得多。